Debian

Debian 中 LSB 初始化腳本的令人困惑的行為

  • September 13, 2016

我在 Debian Wheezy 中遇到了 LSB 初始化腳本的奇怪行為。我可以在以下範例中展示該問題:

該腳本/etc/init.d/resolvconfS執行級別06.

# Default-Start:     S
# Default-Stop:      0 6

事實上,當我chkconfig resolvconf on打開腳本時,我看到符號連結已在各自的執行級別目錄中創建:

$ ls /etc/rc?.d/*resolvconf
/etc/rc0.d/K02resolvconf
/etc/rc6.d/K02resolvconf
/etc/rcS.d/S13resolvconf

當我用 關閉腳本時chkconfig resolvconf off,符號連結消失。到現在為止還挺好。

現在,我決定不希望腳本啟動S(我將手動啟動它),但我仍然希望它在執行級別06. 我相應地更改預設開始:

# Default-Start:     
# Default-Stop:      0 6

並打開腳本chkconfig resolvconf on。什麼也沒有發生。

$ ls /etc/rc?.d/*resolvconf
ls: cannot access /etc/rc?.d/*resolvconf: No such file or directory

沒有創建符號連結,並且腳本不會在執行級別06.

這裡發生了什麼?

我怎樣才能讓腳本只在執行級別執行(停止)0並且6不開始S

更新

正如@Rui F Ribeiro 所建議的那樣,我已經完全刪除了這# Default-Start:條線。現在,當我執行時chkconfig resolvconf on,出現以下錯誤:

insserv: Script resolvconf is broken: incomplete LSB comment.
insserv: missing `Default-Start:'  entry: please add even if empty.
insserv: Default-Start undefined, assuming empty start runlevel(s) for script `resolvconf'

但是,符號連結已創建。

$ ls /etc/rc?.d/*resolvconf
/etc/rc0.d/K02resolvconf
/etc/rc6.d/K02resolvconf

但為什麼我會收到錯誤消息?

chkconfig 在計算腳本的執行級別時只讀取“預設啟動”行。它計算執行級別的數量,並且僅在“預設啟動”insserv 中請求至少一個執行級別時才呼叫…

避免此行為的解決方法包括:

  • 啟用服務chkconfig -a
  • 禁用服務chkconfig -d
  • insserv直接使用,insserv service啟用serviceinsserv -r service刪除它。

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