“服務 {FOO} 啟動”與“/etc/init.d/{FOO} 啟動”?
我在我的 Debian 8 桌面上使用 CrashPlan。我有一個腳本,我必須在開始時停止 CrashPlan 服務,然後在退出之前啟動它。我正在使用
/etc/init.d/crashplan start
重新啟動,但新的 CrashPlan 程序在我的腳本終止時退出。我切換到
service crashplan start
一切都很好!
奇怪的是,在另一個機器上的 Ubuntu 16.04 下,
init.d
腳本/命令的行為符合預期。當我的腳本退出時,CrashPlan 繼續執行。 Welp,現在 Ubuntu 給了我同樣的問題。我的 Debian 腳本現在可以執行了。但是我的印像是該命令即將被棄用,所以我對 Debian 和 Ubuntu 的目前版本之間以及目前版本之間的差異
service
感到困惑。init.d``service
在任何使用 systemd 的系統上,直接執行 init.d 腳本都不是啟動服務的最佳方式,因為它會繞過通常由 systemd 本身完成的所有設置和簿記。此外,您甚至可能沒有初始化腳本,該服務可能只在一個單元文件中描述。
使用“舊式” sysvinit 無需做太多記賬:啟動服務與執行腳本大致相同。這並不意味著直接使用 init 腳本是一個好主意,手冊頁中的描述
service
告訴您原因:
service
在盡可能可預測的環境中執行 System V 初始化腳本或新貴作業,刪除大多數環境變數並將目前工作目錄設置為 /。隨機外殼不是一個非常可預測的環境,您可能會啟動例如文件或程序限制。
至於棄用,也許您應該使用
systemctl
,但在 Debian 上service
實際上會嘗試做正確的事情並systemctl
為您執行。(姑且說如果service
被棄用了,那麼直接執行一個init腳本就更是如此了。)(如果您直接執行 init 腳本,我不足以告訴您究竟是什麼殺死了該服務。這還取決於執行您正在執行的腳本的內容:來自 cron,來自命令行,來自其他東西。 ..)