systemd 如何使用 /etc/init.d 腳本?
我剛切換到 debian jessie,大多數東西都執行良好,包括我的圖形顯示管理器
wdm
。問題是,我只是不明白這是如何工作的。顯然我的
/etc/init.d/wdm
腳本被呼叫了,因為當我早早exit
放在那裡時,wdm 沒有啟動。但是當我或者重命名/etc/rc3.d
目錄時(我的預設執行級別曾經是 3),wdm 仍然啟動。我不知道 systemd 是如何找到這個腳本的,而且我不明白它對所有其他 init.d 腳本的作用。
- systemd 何時以及如何執行 init.d 腳本?
- 從長遠來看,我應該擺脫所有 init.d 腳本嗎?
混亂的答案是一些文件所說的。但這不是 systemd 實際所做的。(這也不是 van Smoorenburg
rc
所做 的。van Smoorenburgrc
絕對沒有忽略 LSB 標頭,insserv
用於計算靜態排序,對於初學者來說。)Freedesktop 文件,例如“不兼容性”頁面,實際上是錯誤的,在這些和其他點。(例如HOME
,實際上經常設置環境變數*。*很長一段時間以來,這在任何地方都完全沒有記錄。現在至少在手冊中記錄了它,但 Freedesktop WWW 頁面仍未更正。)systemd 的原生服務格式是service unit。systemd 的服務管理僅根據這些內容進行操作,它從(系統範圍的)
.service
文件可以存在的九個目錄之一中讀取。/etc/systemd/system
、/run/systemd/system
、/usr/local/lib/systemd/system
和/usr/lib/systemd/system
是其中四個目錄。與 van Smoorenburg
rc
腳本的兼容性是通過名為systemd-sysv-generator
. 該程序列在/usr/lib/systemd/system-generators/
目錄中,因此在每次啟動時由 systemd 在引導過程的早期自動執行,並且在以後每次指示 systemd 重新載入其配置時再次執行。該程序是一個生成器,一種輔助實用程序,其工作是在 tmpfs 中動態創建服務單元文件,這九個目錄中的三個(僅供生成器使用)位於該目錄中。
systemd-sysv-generator
生成執行 van Smoorenburgrc
腳本的服務單元/etc/init.d
,如果它沒有找到其他六個位置中已經存在的同名本機 systemd 服務單元。systemd 服務管理只知道服務單元。這些自動(重新)生成的服務單元被編寫為呼叫 van Smoorenburg
rc
腳本。他們有,除其他外:[單元] SourcePath=/etc/init.d/wibble [服務] ExecStart=/etc/init.d/wibble start ExecStop=/etc/init.d/wibble 停止
公認的觀點是 van Smoorenburg
rc
腳本必須有一個 LSB 標頭,並且在不尊重系統強加的優先級的情況下並行執行/etc/rc?.d/
。這在所有方面都是不正確的。事實上,它們不需要 LSB 標頭,如果沒有,它們
systemd-sysv-generator
可以辨識更有限的舊 RedHat 註釋標頭(description:
、pidfile:
等)。此外,在沒有 LSB 標頭的情況下,它將回退到/etc/rc?.d
符號連結場的內容,讀取編碼到連結名稱中的優先級,並從它們構造一個前/後排序,序列化服務。不僅 LSB 標頭不是必需的,而且它們本身不僅在一定程度上序列化事物的排序之前/之後進行編碼,而且在它們完全不存在的情況下的回退行為實際上是顯著的非並行操作。
/etc/rc3.d
似乎無關緊要的原因是您可能通過另一個/etc/rc?.d/
目錄啟用了該腳本。 將在、和systemd-sysv-generator
中的任何一個中列出轉換為與 systemd 的本機關係。執行級別在 systemd 世界中是“過時的”,您可以忘記它們。/etc/rc2.d/``/etc/rc3.d/``/etc/rc4.d/``Wanted-By``multi-user.target
進一步閱讀
- systemd-sysv-生成器。systemd 手冊頁。自由桌面.org。
- “衍生程序中的環境變數”。
systemd.exec
. systemd 手冊頁。自由桌面.org。- https://unix.stackexchange.com/a/394191/5132
- https://unix.stackexchange.com/a/204075/5132
- https://unix.stackexchange.com/a/196014/5132
- https://unix.stackexchange.com/a/332797/5132