Debian

“服務 {FOO} 啟動”與“/etc/init.d/{FOO} 啟動”?

  • May 30, 2016

我在我的 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,來自命令行,來自其他東西。 ..)

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