update-rc.d 更新 Linux 系統啓動項 命令 用法詳解

探究 Ubuntu 下的 update-rc.d 命令:http://www.linuxdiyf.com/linux/13362.html
Update-rc.d && rc.local 管理 Ubuntu 的開機啓動:http://www.linuxdiyf.com/linux/1057.html
通過 update-rc.d 來管理 Ubuntu 系統的自動啓動程序:http://www.linuxdiyf.com/linux/1056.html
Ubuntu 系統 Update-rc.d 命令:http://www.linuxdiyf.com/linux/906.html
openSUSE 下開機自動運行腳本命令的方法:http://www.linuxdiyf.com/linux/1975.html

ssh 服務開機自動啓動

1、修改sshd_config文件,命令爲:vi /etc/ssh/sshd_config
2、將 #PasswordAuthentication no 的註釋去掉,並且將 NO 修改爲 YES
3、將 #PermitRootLogin yes 的註釋去掉
4、啓動 SSH 服務,命令爲:/etc/init.d/ssh start 查看狀態:/etc/init.d/ssh status 停止服務:/etc/init.d/ssh stop
也可以使用systemctl命令:systemctl start ssh、systemctl status ssh、systemctl stop ssh
5、驗證SSH服務狀態,命令爲:/etc/init.d/ssh status
6、添加開機自啓動 update-rc.d ssh enable 。關閉則爲:update-rc.d ssh disabled 自啓動需要重啓生效

Ubuntu 或者 Debian系統中 update-rc.d 命令 是 用來更新系統啓動項的腳本。這些腳本的鏈接位於/etc/rcN.d/目錄,對應腳本位於/etc/init.d/目錄。在瞭解 update-rc.d命令之前,你需要知道的是有關Linux 系統主要啓動步驟,以及Ubuntu中運行級別的知識。

一、Linux 系統主要啓動步驟

讀取 MBR 的信息,啓動 Boot Manager。
加載系統內核,啓動 init 進程, init 進程是 Linux 的根進程,所有的系統進程都是它的子進程。
init 進程讀取 /etc/inittab 文件中信息,並進入預設的運行級別。通常 /etc/rcS.d/ 目錄下的啓動腳本首先被執行,然後是/etc/rcN.d/ 目錄。
根據 /etc/rcS.d/ 文件夾中對應的腳本啓動 Xwindow 服務器 xorg,Xwindow 爲 Linux 下的圖形用戶界面系統。
啓動登錄管理器,等待用戶登錄。

即在Linux系統下,一個Services的啓動、停止以及重啓通常是通過/etc/init.d目錄下的腳本來控制的。然而,在啓動或改變運行級別時,是在/etc/rcX.d中來搜索腳本。其中X是運行級別的number。當你在Debian下安裝一個新的服務,比如Apache2,安裝完成後,默認情況下它會啓動,並在下一次重啓後自動啓動。但是如果你不是一直需要這個服務,只在需要的時候啓用它,你可以禁用它。直到你需要使用的時候,執行如下指令: /etc/init.d/apache2 start

要實現這個目的,你需要先在/etc/rcX.d目錄中刪除所有apache2的符號鏈接,但這個方法操作麻煩,且效率低下。可以使用update-rc.d命令來實現這個功能。

1、刪除一個服務
如果你想手動的完全禁用Apache2服務,你需要刪除其中的所有在/etc/rcX.d中的單一鏈路。

但是如果使用update-rc.d,則非常簡單:
update-rc.d -f apache2 remove
參數 -f 是強制刪除符號鏈接,即使/etc/init.d/apache2仍然存在。
Note:這個命令僅僅禁止該服務,直到該服務被升級。

如果你想在服務升級後仍然保持被禁用。應該執行如下的命令:
update-rc.d apache2 stop 80 0 1 2 3 4 5 6 .

2、增加一個服務

如果你想重新添加這個服務並讓它開機自動執行,你需要執行以下命令:
update-rc.d apache2 defaults
並且可以指定該服務的啓動順序:
update-rc.d apache2 defaults 90
還可以更詳細的控制start與kill順序:
update-rc.d apache2 defaults 20 80
其中前面的20是start時的運行順序級別,80爲kill時的級別。也可以寫成:
update-rc.d apache2 start 20 2 3 4 5 . stop 80 0 1 6 .
其中0~6爲運行級別。 update-rc.d命令不僅適用Linux服務,編寫的腳本同樣可以用這個命令設爲開機自動運行

例子:
update-rc.d httpd start 20 2 3 4 5 . stop 20 0 1 6 .
解析:表示在2、3、4、5這五個運行級別中,由小到大,第20個開始運行ushare;在 0 1 6這3個運行級別中,第20個關閉apachectl。
這是合併起來的寫法,注意它有2個點號,效果等於下面方法:
update-rc.d httpd defaults
3:設置啓動和關閉順序爲80,20,級別默認
update-rc.d <basename> defaults 80 20

二、運行級別

Ubuntu中的運行級別

0(關閉系統)
1(單用戶模式,只允許root用戶對系統進行維護。)
2 到 5(多用戶模式,其中3爲字符界面,5爲圖形界面。)
6(重啓系統)
切換運行級別

init [0123456Ss]
例如:init 0 命令關機; init 6 命令重新啓動
啓動項管理工具

sudo install sysv-rc-conf //或者使用帶gui的工具bum
sudo sysv-rc-conf

三、update-rc.d命令詳解

從所有的運行級別中刪除指定啓動項:update-rc.d -f <basename> remove
按指定順序、在指定運行級別中啓動或關閉:update-rc.d <basename> start|stop <order> <runlevels>

實例:update-rc.d apachectl start 20 2 3 4 5 . stop 20 0 1 6 .
解析:表示在2、3、4、5這五個運行級別中,由小到大,第20個開始運行apachectl;
在 0 1 6 這3個運行級別中,第20個關閉apachectl。
這是合併起來的寫法,注意它有2個點號,
效果等於下面方法:update-rc.d apachectl defaults

A啓動後B才能啓動,B關閉後A才關閉:
update-rc.d A defaults 80 20
update-rc.d B defaults 90 10

啓動和關閉順序爲90,級別默認:update-rc.d <basename> defaults 90

apache2、nginx、Redis 這些服務安裝之後,會隨開機啓動,當這些服務並不需要時,就存在cpu和內存的浪費。
利用 update-rc.d 命令 我們可以實現啓動項的管理。

添加啓動項:

sudo update-rc.d apache2 defaults
sudo update-rc.d nginx defaults
sudo update-rc.d redis_6379 defaults

刪除啓動項

sudo update-rc.d -f apache2 remove
sudo update-rc.d -f nginx remove
sudo update-rc.d -f redis_6379 remove

運行例子:

$ sudo update-rc.d -f redis_6379 remove
[sudo] password for user:
Removing any system startup links for /etc/init.d/redis_6379 ...
/etc/rc0.d/K20redis_6379
/etc/rc1.d/K20redis_6379
/etc/rc2.d/S20redis_6379
/etc/rc3.d/S20redis_6379
/etc/rc4.d/S20redis_6379
/etc/rc5.d/S20redis_6379
/etc/rc6.d/K20redis_6379

查看/etc/rc.d/ 目錄下,20redis_6379 已經被刪除,反之會被添加。

兩種開機執行腳本的方法

很多應用程序、服務需要在機器啓動的時候自動執行,這裏記錄兩種開機執行腳本的方法

  1. 修改/etc/rc.local
    在/etc/rc.local的exit 0語句之間添加啓動腳本。腳本必須具有可執行權限。

vi /etc/rc.local 文本編輯,輸入以下內容,存檔即可。
/etc/init.d/ssh start exit 0

  1. 用 update-rc.d 命令添加開機執行腳本

update-rc.d命令

此命令用於 安裝 或 移除 System-V 風格的初始化腳本連接。腳本是存放在 /etc/init.d/目錄下的,當然可以在此目錄創建連接文件連接到存放在其他地方的腳本文件。此命令可以指定腳本的執行序號,序號的取值範圍是 0-99,序號越大,越遲執行。

用法

update-rc.d [-n] [-f] name remove 用於移除腳本。
update-rc.d [-n] name default [NN | SS KK],NN表示執行序號(0-99),SS表示啓動時的執行序號,KK表示關機時的執行序號,SS、KK主要用於在腳本直接的執行順序上有依賴關係的情況下。

選項

-n:不做任何事情,只顯示將要做的。(預覽、做測試)
-f:強制移除符號連接,即使 /etc/init.d/script-name 仍然存在。

流程:

創建要開機自動執行的腳本:/home/test/blog/startBlog.sh,
給予可執行權限:chmod +x /home/test/blog/startBlog.sh。
在 /etc/init.d 目錄下創建鏈接文件到前面的腳本: ln -s /home/test/blog/startBlog.sh /etc/init.d/startBlog。
進入/etc/init.d目錄,用 update-rc.d 命令將連接文件 startBlog 添加到啓動腳本中去:update-rc.d startBlog defaults 99。
其中的99表示啓動順序,取值範圍是0-99。序號越大的越晚執行。
移除啓動的腳本:update-rc.d -f startBlog remove。
-f 選項表示強制執行。

舉例

update-rc.d startBlog defaults 99:添加一個啓動連接,執行序號是99。

如果執行腳本B需要先執行腳本A,如下設置(A的啓動順序比B的小,結束順序比B的大):
update-rc.d script_for_A defaults 80 20
update-rc.d script_for_B defaults 90 10

添加一個不被其他任何服務需要的服務:update-rc.d script_name defaults 98 02,
添加一個需要 開始/結束 序號在20的服務的服務:update-rc.d script_depends_on_service_20 default 21 19。
移除一個腳本,假定/etc/init.d/目錄下的腳本文件已先被刪除:update-rc.d script_name remove。
移除一個腳本,不管/etc/init.d/目錄下的腳本文件是否已刪除:update-rc.d -f script_name remove。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章