
我確實安裝了一台伺服器,我總是需要在終端機中運行它。該命令看起來像
software server
現在我希望它在後台運行,而不需要保持視窗打開。我考慮過創建一項服務。我的 software.service 看起來像
[Unit]
Description=Software Server
[Service]
Type=simple
ExecStart=/opt/software/bin/software server
然而。在所有服務和指南中都需要定義 ExecStop。如果伺服器沒有真正支援它,我該如何做到這一點?我可以在停止時終止該進程嗎?
任何如何解決我的問題的建議(不一定是服務)
答案1
https://www.freedesktop.org/software/systemd/man/systemd.service.html
相關位,重點是我的:
執行停止=
執行命令以停止透過 ExecStart= 啟動的服務。此參數採用多個命令列,遵循與上面 ExecStart= 所描述的相同方案。此設定的使用是可選的。 執行此選項中配置的命令後,表示服務將停止,並且根據 KillMode= 設定(請參閱 systemd.kill(5)),該服務剩餘的任何進程都會終止。 如果未指定此選項,則當請求服務停止時,透過傳送 KillSignal= 或 RestartKillSignal= 中指定的訊號來終止進程。支援說明符和環境變數替換(包括 $MAINPID,請參閱上文)。
請注意,為此設定指定一個命令通常是不夠的,該命令僅要求服務終止(例如,透過向其發送某種形式的終止訊號),但不等待服務終止。由於在命令退出後,服務的剩餘進程立即根據上述 KillMode= 和 KillSignal= 或 RestartKillSignal= 被終止,因此這可能不會導致乾淨停止。因此,指定的命令應該是同步操作,而不是非同步操作。
和https://www.freedesktop.org/software/systemd/man/systemd.kill.html#告訴我們:
預設為 SIGTERM。
所以:如果您不指定 ExecStop 並運行systemctl stop software_server
SystemD 將執行與kill -15
.