Ubuntu 服务自动启动

有时候,我们希望服务器重启后能够自动的把相关的服务启动起来。在了解如何让服务自动启动前,我们需要先了解一下,linux系统的启动步骤。

linux 系统的启动步骤

  1. 读取 MBR 的信息,启动 Boot Manager。
  2. 加载系统内核,初始化硬件和设备驱动,启动 init 进程, init 进程是 Linux 的根进程,所有的系统进程都是它的子进程,也就是说 init 进程会根据配置文件继续引导过程,启动其它进程。
  3. init 进程读取 /etc/inittab 文件中的信息,并进入预设的运行级别。通常情况下 /etc/rcS.d/ 目录下的启动脚本首先被执行,然后是/etc/rcN.d/ 目录。
  4. 根据 /etc/rcS.d/ 文件夹中对应的脚本启动 Xwindow 服务器 xorg,Xwindow 为 Linux 下的图形用户界面系统。
  5. 启动登录管理器,等待用户登录。

运行级别

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
2
3
4
5
6
$ chkconfig --list
acct 0:off 1:off 2:on 3:on 4:on 5:on 6:off
aegis 0:off 1:off 2:on 3:on 4:on 5:on 6:off
apparmor 0:off 1:off 2:off 3:off 4:off 5:off 6:off S:on
atd 0:off 1:off 2:off 3:off 4:off 5:off 6:off
binfmt-support 0:off 1:off 2:off 3:off 4:off
  • 开启自动启动服务

 如果需要自启动某些服务,只需使用chkconfig 服务名 on即可,若想关闭,将on改为off

1
$ chkconfig sshd on

 在默认情况下,chkconfig会自启动2345这四个级别,如果想自定义可以加上 –level 选项。

1
$ chkconfig --level 35 sshd on

参考