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。

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