update-rc.d 是在 Debian 或 Ubuntu 內用來管理
/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 服務已經先啟動了。