Debian

debian 服務相對於文件的行為

  • December 16, 2019

我目前有一個執行檔,它是我正在開發的程序,用 C 語言編寫。它載入一個配置文件 - 取決於它將具有某種行為。這是經過測試的,當我從 shell 啟動它時可以工作。

但是我希望它與系統一起啟動,因此我為它提供了服務。該服務只是在啟動時啟動我的執行檔。

這樣做時,程序將始終具有預設行為,就好像文件被忽略了一樣。

發生這種情況有什麼原因嗎?我目前的猜測是程序可能正在啟動,而由於某種原因尚未準備好訪問文件(因為我的程序按預期寫入幀緩衝區,早在使用者可以通過串列埠登錄系統之前)。

我不知道這是否正確,以及如何解決它。提前致謝。

執行檔是否在目前工作目錄中尋找配置文件?如果是這樣,那麼您應該知道,在啟動時啟動的任何服務通常會將其工作目錄設置為,/除非該服務另有說明。

.service文件中,您可以使用類似的行

WorkingDirectory=/home/user/demo

啟動服務程序已經cd’d 到所需的目錄。有關man systemd.exec更多詳細資訊,請參閱。

還是執行檔試圖使用HOME環境變數的值作為配置文件路徑名的一部分?服務根本不需要HOME設置環境變數。如有必要,您可以將其設置在具有.service如下行的文件中:

Environment="HOME=/home/user"

但是,對於應該作為 systemd 服務執行的程序來說,這有點出人意料。您可能想要使用其他一些環境變數而不是HOME,並明確記錄它。

在程序中,如果您還沒有這樣做,您可能希望將配置文件的位置指定為完整路徑名。

引用自:https://unix.stackexchange.com/questions/557455