記錄 Systemd Unit 編寫時的一個坑

前幾天,我突發奇想:在 EFB 的 Unit 文件中,我多次使用了 /usr/local/python3.6/bin 這個目錄,可以使用環境變數來代替它,這樣只需修改一處即可更改所有的路徑。

結果,在運行時報出了 Executable path is not absolute, ignoring 錯誤,可是我明明定義的是絕對路徑。

經過 Google,我了解到無法使用環境變數作為 Systemd 運行的程式。解決辦法是使用

/usr/bin/sh -c '<帶有環境變數的程式路徑>'

經過測試,可以正常運行了。

另外,環境變數必須用 {} 包圍
例子

${PYTHON_BIN}/pip3

參考資料

Systemd or Screen?

最近發現很多人使用 Screen 來在 Linux 上守護進程,其實此時應該使用 Systemd。

Screen 不是爲了守護進程而生,適用於守護需要命令操作的進程。如 Minecraft Server。而 Systemd 是系統的守護進程,支援開機自啓等功能,日志也方便儲存。而且 Screen 要記那麽多組合鍵,太麻煩(

所以,我的 EWS、FFM 教程都使用 Systemd 守護。如果你還在用 Screen 守護,可以試試😋(