Systemd

使用 systemd 將守護程序設置為在啟動時啟動

  • March 26, 2020

我正在編寫一個守護程序來使用 jsvc 和這個(可能是 pre-systemd)教程在一個無頭Ubuntu 16.04機器上管理我的 Java 應用程序,並且一直執行,收到錯誤update-rc.d mydaemon enable

update-rc.d: error: mydaemon Default-Start contains no runlevels, aborting

在Google上搜尋了一下,這似乎與(相當?)最近遷移到systemd,我已經確認它正在執行pidof systemd

我如何實現與啟動時相同的行為update-rc.d(更重要的是通過停止服務/etc/init.d/mydaemon stop而不是在 Java 應用程序需要清理時終止程序)。是systemdupdate-rc.d不同的系統,還是systemd只是改變了後者的工作方式?

我沒有 Ubuntu 16.04 來測試它,也沒有為您提供許多細節,但 systemd 具有允許舊/etc/init.d腳本繼續工作的兼容性功能。不要使用update-rc.d來啟用您的守護程序,而是使用等效的 systemd 本機命令:

sudo systemctl enable mydaemon

如果這仍然產生相同的錯誤,請將缺少的行添加到腳本的起始註釋集中:

# Default-Start:  2 3 4 5
# Default-Stop: 0 1 6

### BEGIN INIT INFO和線之間### END INIT INFO,然後再試一次。請參閱這些行的LSB 核心描述。您還可以使用顯式啟動守護程序

sudo systemctl start mydaemon

並詢問其狀態

sudo systemctl status -l mydaemon

有關man systemd-sysv-generator兼容性功能,請參閱。請參閱此 wiki以將 System V 或像您這樣的新貴腳本轉換為本機 systemd 單元。

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