Systemd

使環境變數可用於在 init.d 腳本中啟動的下游程序

  • August 21, 2019

這個問題源於@FrustratedWithFormsDesigner評論

如何使export在 init.d 腳本中設置的環境變數可用於在同一 init.d 腳本中啟動的下游程序?

更詳細地說,我在一個 Amazon EC2 實例上並使用 init.d 腳本來控制我的node.js 伺服器,該伺服器又由nodemon哪個監視器控製文件更改並node根據需要重新啟動。所以簡而言之,我的 init.d 腳本開始nodemon,然後開始node。在 init.d 腳本中設置的環境變數export似乎對 可用nodemon,但對 不可用node。如何使這些環境變數node也可用?

目前,我的 Amazon EC2 實例中只有 init.d 可用,所以這甚至可以通過 init.d 腳本實現,如果沒有,這對於 upstart 或最好是 systemd 是否可行?

我建議切換到基於 systemd 的 Linux 發行版,例如 Fedora 或 Ubuntu 16.04。systemd可以輕鬆地將環境變數傳遞給您的程序,並且它可以自動重新啟動失敗的程序以及在啟動時啟動它。systemd 的 journald 也可以很好地處理日誌記錄。也沒有安裝或執行其他任何東西的成本,因為 systemd 是作業系統分發的一部分。

這是在一個單元文件中使用 systemd 設置兩個環境環境變數的範例:

Environment="ONE=one" 'TWO=two two'

完整的文件在這裡

您的問題部分是複雜性之一,因為初始化系統和程序管理器都處理傳遞的環境變數。使用 systemd 作為初始化系統和程序管理器,消除了一層複雜性。

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