Chinaunix首页 | 论坛 | 博客

分类: LINUX

2009-01-21 14:16:26

  启动系统服务与相关启动设定档 (/etc/rc.d/rc.n & /etc/sysconfig)

  载入核心让整个系统准备接受指令来工作,然后再经过 /etc/rc.d/rc.sysinit 的系统模组与相关硬体资讯的初始化后,你的 FC4 系统应该已经顺利工作了。 只是,我们还得要启动系统所需要的各项‘服务’啊!这样主机才能提供我们相关的网路或者是主机功能嘛! 这个时候,依据我们在 /etc/inittab 里面提到的 run level 设定值,就可以来决定启动的服务项目了。 举例来说,使用 run level 3 当然就不需要启动 X Window 的相关服务啰,您说是吧?

  那么各个不同的 run level 服务启动的各个 shell script 放在哪?还记得 /etc/inittab 里面提到的:

  l0:0:wait:/etc/rc.d/rc 0
  l1:1:wait:/etc/rc.d/rc 1
  l2:2:wait:/etc/rc.d/rc 2
  l3:3:wait:/etc/rc.d/rc 3
  l4:4:wait:/etc/rc.d/rc 4
  l5:5:wait:/etc/rc.d/rc 5
  l6:6:wait:/etc/rc.d/rc 6

  上面提到的就是各不同 run level 放置的目录啦!举例来说, run level 3 的启动目录就是放在 /etc/rc.d/rc3.d 目录当中啰~当然啦,不同的 distributions 这个目录可能会有差异, 所以,您还是得要自行到 /etc/inittab 里面瞧一瞧先!那么在这个目录当中有什么咚咚啊? 我们先以鸟哥自己的宿舍的 FC4 主机里头的 run level 3 的启动目录瞧一瞧:

  [root@linux ~]# ls -l /etc/rc.d/rc3.d
  lrwxrwxrwx  1 root root 13 Jun 29 01:05 K01yum -> ../init.d/yum
  lrwxrwxrwx  1 root root 19 Jun 29 01:05 K02haldaemon -> ../init.d/haldaemon
  .....中间省略......
  lrwxrwxrwx  1 root root 17 Sep 16 14:09 S01sysstat -> ../init.d/sysstat
  lrwxrwxrwx  1 root root 17 Jun 29 01:05 S10network -> ../init.d/network
  lrwxrwxrwx  1 root root 16 Jun 29 01:05 S12syslog -> ../init.d/syslog
  .....中间省略......
  lrwxrwxrwx  1 root root 11 Jun 25 08:27 S99local -> ../rc.local

  在这个目录下的档案很有趣,全部都是以 S 或者是 K 为开头的档案,而且全部都是连结档, 连结到 /etc/rc.d/init.d 里面的 shell script 呢!而在 /etc/rc.d/init.d 这个目录其实与 /etc/init.d 是一样的,因为这两个目录是连结档啊!要注意的是,在 /etc/rc.d/init.d/ 底下的 shell scripts 都使用 case.....esac 的语法,而且支援的变数 ($1) 主要有 start 及 stop , 相关的 shell script 请您回到第三篇去复习。所以,一般来说,如果我们想要启动一些系统服务,例如启动 atd , 需要使用:

  /etc/rc.d/init.d/atd start (也可以用 /etc/init.d/atd start)

  如果是关闭该服务,就是使用:

  /etc/rc.d/init.d/atd stop

  瞭解鸟哥想要表达的东西了吗?是的~如果我想要在 run level 3 的环境下执行某个服务, 当然就得要将该服务写入 /etc/rc.d/rc3.d 里面去,而既然我们的服务已经在 /etc/rc.d/init.d 里面建立好了, 自然可以使用连结的方式连结到 /etc/rc.d/init.d/ 内的相关的 shell script 啦。不过,为了解决 start 或 stop 这个变数,因此就有了 S 与 K 开头的档名了。

  另外,各不同的服务其实还是互有关系的,举例来说,如果要启动 WWW 服务,总是得要有网路吧? 所以啰, /etc/rc.d/init.d/network 就会比较先被启动啦!那么您就会知道在 S 或者是 K 后面接的数字是啥意思了吧?嘿嘿,那就是执行的顺序啦!所以说:

  * 在 /etc/rc.d/rc3.d 内的,以 S 为开头的档案,为开机时,需要‘启动, start’的服务;
  * 在该目录内的 K 为开头的档案,为‘关机时需要关闭的服务, stop’的档案连结;
  * 在 S 与 K 后面接的数字,代表该档案被执行的顺序。

  举例来说,在上表当中, S10network 指向 ../init.d/network ,代表:开机时,执行‘ /etc/rc.d/init.d/network start ’的意思,而 S12syslog 则代表开机时执行‘ /etc/rc.d/init.d/syslog start ’的意思,且 S10network 要比 S12syslog 还要早执行喔! 所以啰,看到最后一个被执行的项目是啥?呵呵!没错,就是 S99local ,亦即是: /etc/rc.d/rc.local 这个档案啦!

  好了,那么问题来了,我要如何建立 /etc/rc.d/init.d 里面的档案呢? 很简单啊,看一下 /etc/rc.d/init.d/atd 的内容就知道了,而更多的 services 启动与相关说明,我们会在后续的 认识系统服务 详谈。 而将 /etc/rc.d/init.d/ 连结到 /etc/rc.d/rc3.d 的方法,除了手动建立外, 其实我们都是以 chkconfig 这个程式来进行管理的呢!更多的 chkconfig 请参考认识系统服务那一章。

阅读(1273) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~