Linux

具有多個 After 的 systemd 服務

  • November 20, 2018

是否可以創建依賴於其他幾個服務的服務?什麼是正確的語法?

如:

[Unit]
Description=service description
Wants=network.target
After=network.target
After=syslog.target

[Service]
User=bootapp
ExecStart=/var/app/app.jar
SuccessExitStatus=143

[Install]
WantedBy=multi-user.target

目標是在作業系統重新啟動後自動啟動服務,並確保在服務之前啟動日誌記錄和網路服務。

附加問題:我需要指定Restart嗎?

您發布的單元文件看起來不錯。但是您在此處定義的單元沒有嚴格的依賴關係,只有弱(Wants=而不是Requires=)。這意味著如果 network.target 不存在或無法啟動,則無論如何都會啟動該單元。After=(and Before=) 僅用於排序,不用於依賴管理。因此,如果您的應用需要其他服務,請使用Requires=. 如果它需要該服務才能自行啟動,請After=另外使用。

要使您的設備在啟動後自動啟動,您必須啟用它。Systemd 需要知道從哪裡開始連結它,這就是WantedBy=[Install]部分中的用途。在編輯單元文件並將其保存後,/etc/systemd/system/my-unit.service您必須重新載入 systemd 守護程序以使其拾取新單元,然後才能啟用它;命令是systemctl daemon-reload。啟用單位類型systemctl enable my-unit.service/etc/systemd/system/multi-user.target.wants/這會在您的單元文件中添加一個符號連結。

要手動啟動它,您可以鍵入systemctl start my-unit.service.

Restart=僅當您希望應用程序退出時自動重新啟動時才需要。何時重新啟動有不同的可能性,例如on-failurealways(更多資訊在 的手冊頁中systemd.service)。

此外,您的 app.jar 需要可執行才能使其正常工作。如果是並且它啟動了您的應用程序,那就沒問題了。我認為一個罐子必須由某事開始。喜歡java -jar app.jar,但ofc。我在這裡可能是錯的。

引用自:https://serverfault.com/questions/940220