Debian/Ubuntu 的 update-rc.d 使用教學

Debian update-rc.d 是在 DebianUbuntu 內用來管理 /etc/init.d 目錄內的 scripts 工具。不管是 Nginx 或 Mysql 等相關服務,都可以在 /etc/init.d 目錄內找到相對應的 script 檔案,隨便打開一個 script 檔案就可以看到標頭有固定的格式寫法:
### BEGIN INIT INFO
# Provides:          gorush
# Required-Start:    $syslog $network
# Required-Stop:     $syslog $network
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: starts the gorush web server
# Description:       starts gorush using start-stop-daemon
### END INIT INFO
從上面格式可以看到預設啟動模式可以在 2 3 4 5 其餘的 0 1 6 則是關閉,這邊基本上可以不用動它,詳細的寫法可以直接參考 /etc/init.d/skeleton 檔案,或者是直接複製修改即可。由於筆者都在寫 Go 語言,包成二進制執行檔後,就必須靠 update-rc.d 產生相對應的 scripts。
  • 0 關機模式
  • 1 單機使用
  • 6 重新開機

使用方式

/etc/init.d 目錄下寫好 script 後,可以用 update-rc.d 自動在 /etc/rcX 產生 link 檔案,請直接使用底下指令
$ update-rc.d gorush default 20
如果執行上述指令遇到底下錯誤:
update-rc.d: warning: start runlevel arguments (none) do not match gorush Default-Start values (2 3 4 5) update-rc.d: warning: stop runlevel arguments (none) do not match gorush Default-Stop values (0 1 6)
請直接將指令改成
$ update-rc.d gorush start 20 2 3 4 5 . stop 80 0 1 6 .
如果您的服務必須先將 Mysql 啟動,有兩種方式解決這問題,第一種是透過 update-rc.d 修改起動順序:
$ update-rc.d mysqld defaults 80 20
$ update-rc.d gorush defaults 90 10
上面就是代表啟動時,先啟動 mysqld 後啟動 gorush,關機時,先停止 gorush 後停止 mysqld。個人不推薦使用這方法,另一個方式就是調整 script 標頭內容
- # Required-Start:    $syslog $network
+ # Required-Start:    $mysqld $syslog $network
這樣就可以確保執行 gorush 前,MySQL 服務已經先啟動了。