具有多個 After 的 systemd 服務
是否可以創建依賴於其他幾個服務的服務?什麼是正確的語法?
如:
[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=
(andBefore=
) 僅用於排序,不用於依賴管理。因此,如果您的應用需要其他服務,請使用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-failure
或always
(更多資訊在 的手冊頁中systemd.service
)。此外,您的 app.jar 需要可執行才能使其正常工作。如果是並且它啟動了您的應用程序,那就沒問題了。我認為一個罐子必須由某事開始。喜歡
java -jar app.jar
,但ofc。我在這裡可能是錯的。