Path

如何為守護程序(或其他最佳實踐)向 PATH 添加新元素?

  • April 7, 2014

我想為 Linux 伺服器(Ubuntu 12.04)添加一些用於自定義管理工作的腳本。最終,這些腳本是來自至少一個守護程序的回調腳本(在我的例子中是 PostgreSQL,但這無關緊要)。為了讓守護程序找到我的腳本,我必須提供完整路徑;我/opt/<package>/bin按照FHS使用。

當我將該路徑添加到 PATH 中時/etc/environment,使用者可以在不提供完整路徑的情況下呼叫腳本,但守護程序不能;它只是說“未找到”。

所以我的問題基本上是雙重的:

  1. 如何為守護程序添加路徑到 PATH?
  2. 無論如何,這是個好主意嗎?還是我應該總是使用完整的路徑名?

當我將該路徑添加到 /etc/environment 中的 PATH 時,使用者可以在不提供完整路徑的情況下呼叫腳本,但守護程序不能;它只是說“未找到”。

根據這個來源,這是 IBM AIX 文件(我找不到其他任何東西),但一般來說可能是正確的:1

作業系統在登錄時使用的第一個文件是 /etc/environment 文件。/etc/environment 文件包含指定所有程序的基本環境的變數。

請注意,它不是在任何系統範圍內獲取的.profile,因此在某處進行了硬編碼。但是,如果它“在登錄時”應用,它將不適用於由 init 啟動並且從不登錄的守護程序(儘管“對於所有程序”與此相矛盾,也許這只是一個糟糕的詞選擇)。

根據這個超級使用者 Q&A/etc/environment它是PAM的一部分,它支持“登錄時”前提,再次意味著它不會被 init 衍生的守護程序使用。對此也有很多其他參考資料,但似乎不是實際的 PAM 文件。

我應該總是使用完整的路徑名嗎?

這是最常見和普遍推薦的過程——守護程序可能根本沒有 $PATH 啟動。因此,您可以在啟動腳本中自行設置,或者如您所說,酌情使用完整路徑名。

  1. “/etc/environment” 根本沒有出現在相關的 POSIX 規範中$$ 1 $$ $$ 2 $$.

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