Services

編寫基本的 systemd 服務文件

  • September 1, 2021

我正在開發一個 Nodejs 應用程序,使用者通過 localhost 上的 HTTP 與之互動。幾乎沒有參數,守護程序幾乎沒有依賴關係,它只需要在登錄時啟動。

我想在每個平台上遵循啟動腳本的習慣用法,這意味著 Ubuntu 上的 Upstart 和 Fedora 上的 systemd。

  • 有沒有編寫 systemd 系統文件的好教程?
  • 是否有任何“最佳實踐”需要注意?

我找到了這些資源:

我主要是在尋找各種 API 作為參考,以及要遵循的基本格式。

我將從Systemd 手冊頁開始。它們代表了系統和服務的綜合資源。

還有freedesktop Systemd 常見問題解答

以下範例受到此連結的啟發,該連結實際上並未提及所有步驟,僅列出來源: http: //patrakov.blogspot.com/2011/01/writing-systemd-service-files.html

第 1 步:我創建了這個文件(註釋位置),它本質上會觸發一個帶有擴展參數的 bash 程序。您可以觸發自己的命令,該命令可能與 bash 不同。

[root@y500-fedora ~]# cat /etc/systemd/system/foo.service 
[Unit]
Description=foo

[Service]
ExecStart=/bin/bash -c "while true; do /bin/inotifywait -qq --event close_write /sys/class/backlight/acpi_video0/brightness; su myusername -c '/bin/xbacklight -display :0 -set $(cat /sys/class/backlight/acpi_video0/brightness)'; done"

[Install]
WantedBy=multi-user.target

第 2 步

重新載入systemd

systemctl daemon-reload

啟動新服務:

systemctl enable foo

(同樣可以disable

(可選)第 3 步:它應該在下次重新啟動時自動啟動到多使用者模式(執行級別 3),但如果您想立即啟動它:

systemctl start foo
systemctl status foo # optional, just to verify

**更新:**為了完整起見,我應該補充一點,ubuntu bionic 似乎有一個非常詳盡的手冊頁。此處為 RTFM

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