有时候,我们希望服务器重启后能够自动的把相关的服务启动起来。在了解如何让服务自动启动前,我们需要先了解一下,linux系统的启动步骤。
linux 系统的启动步骤
- 读取 MBR 的信息,启动 Boot Manager。
- 加载系统内核,初始化硬件和设备驱动,启动 init 进程, init 进程是 Linux 的根进程,所有的系统进程都是它的子进程,也就是说 init 进程会根据配置文件继续引导过程,启动其它进程。
- init 进程读取 /etc/inittab 文件中的信息,并进入预设的运行级别。通常情况下 /etc/rcS.d/ 目录下的启动脚本首先被执行,然后是/etc/rcN.d/ 目录。
- 根据 /etc/rcS.d/ 文件夹中对应的脚本启动 Xwindow 服务器 xorg,Xwindow 为 Linux 下的图形用户界面系统。
- 启动登录管理器,等待用户登录。
运行级别
Ubuntu中的运行级别
0(关闭系统)
1(单用户模式,只允许root用户对系统进行维护。)
2 到 5(多用户模式,其中3为字符界面,5为图形界面。)
6(重启系统)
运行级别目录
在 /etc/rc0.d ~ /etc/rc6.d 和 /etc/rcS.d 目录下,这7个目录中,每个目录分别存放着对应运行级别加载时需要关闭或启动的服务。1
2
3
4
5
6
7
8
9$ ls -l /etc/rc2.d/
total 4
lrwxrwxrwx 1 root root 18 Aug 9 2013 K01ondemand -> ../init.d/ondemand
lrwxrwxrwx 1 root root 18 Mar 13 09:44 K01pppd-dns -> ../init.d/pppd-dns
lrwxrwxrwx 1 root root 15 Mar 13 09:44 K01rsync -> ../init.d/rsync
lrwxrwxrwx 1 root root 14 Mar 13 09:44 S01acct -> ../init.d/acct
lrwxrwxrwx 1 root root 15 Mar 13 09:44 S01aegis -> ../init.d/aegis
lrwxrwxrwx 1 root root 14 Mar 13 09:44 S01sudo -> ../init.d/sudo
...
- 由显示的信息可以知道,其实每个脚本文件都对应着/etc/init.d/目录下具体的服务K开头的脚本文件代表运行级别加载时需要关闭的,S开头的代表需要执行
使用软连接设置自动启动
由上面的详细信息可以知道,当我们需要开机启动自己的脚本时,只需要将可执行脚本丢在/etc/init.d目录下,然后在 /etc/rc.d/rc*.d 中建立软链接即可。1
$ ln -s /etc/init.d/sshd /etc/rc.d/rc3.d/S100ssh
- 此处 sshd 是具体服务的脚本文件,S100ssh 是其软链接,S开头代表加载时自启动
- 如果需要在多个运行级别下设置自启动,则需建立多个软链接
- 这种方式比较繁琐,适用于自定义的服务脚本
- 如果系统中已经存在某些服务(比如安装 apache 时就会有 httpd 服务项),可以使用下面的两种方式。
使用 update-rc.d 命令设置自动启动项
从所有的运行级别中删除指定启动项
1
$ update-rc.d -f <basename> remove // basename 为服务的名称
按指定顺序、在指定运行级别中启动或关闭
1
2$ 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个点号,效果等于下面方法:1
$ update-rc.d apachectl defaults
- 启动和关闭顺序为90,级别默认
1
$ update-rc.d <basename> defaults 90
A启动后B才能启动,B关闭后A才关闭1
2$ update-rc.d A defaults 80 20
$ update-rc.d B defaults 90 10
使用 chkconfig 命令设置自动启动项
- 查看自动启动项
1 | $ chkconfig --list |
- 开启自动启动服务
如果需要自启动某些服务,只需使用chkconfig 服务名 on即可,若想关闭,将on改为off1
$ chkconfig sshd on
在默认情况下,chkconfig会自启动2345这四个级别,如果想自定义可以加上 –level 选项。1
$ chkconfig --level 35 sshd on