Chinaunix首页 | 论坛 | 博客
  • 博客访问: 413793
  • 博文数量: 147
  • 博客积分: 5400
  • 博客等级: 大校
  • 技术积分: 1380
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-12 20:29
文章分类

全部博文(147)

文章存档

2013年(1)

2012年(44)

2011年(5)

2010年(4)

2009年(22)

2008年(71)

分类: LINUX

2008-03-23 00:50:46

init chkconfig

Linux启动时遵照Sys V init的boot过程进行,init是由核心在系统boot时运行的程序。由它负责启动所有的需要在boot时运行的进程。其中包括供用户登入的getty,NFS守护进程,FTP守护进程,以及任何需要机器在boot时启动的进程。Sys V init已成为LINUX世界中boot时启动进程的标准。Sys V init的配置文件位于/etc下面的一个名为rc.d子目录中,在rc.d下会发现rc.sysinit以及以下目录:
  init.d
  rc0.d
  rc1.d
  rc2.d
  rc3.d
  rc4.d
  rc5.d
  rc6.d
  init.d下面有许多脚本程序。一般来说,针对每一项需要在boot或转变运行级时启动的服务均需要一个脚本程序。这些服务包括网络,NFS,sendmail,httpd等等。服务中不包括那些象setserial一样只运行一次就退出的命令。而那些东西应当放在 rc.local或rc.serial中。如果需要rc.local的话,就把它放在/etc/rc.d下。大多数系统都包括这样一个脚本,即便也没什么用。需要的话还可以在/etc/rc.d下放置一个rc.serial,用于boot时做与串口相关的操作。 启动事件的执行过程是这样的:

系统核心在几个地方查找init并开始执行第一个发现的init。
由init来执行/etc/rc.d/rc.sysinit
rc.sysinit执行了一系列的操作后接着运行rc.serial(如果存在的话)
由init执行所有默认运行级下的脚本程序
init执行rc.local
  默认的运行级由/etc/inittab控制。在该文件前面应有一行:
  id:3:initdefault:
对于大多数系统,该值被设置为3,也就是默认运行级为3。如果想改变默认运行级,就编辑/etc/inittab,将3改为其它数值。

  我们先来看一下rc2.d,我们可以看到很多以S加数字开头的符号连接。 文件开头的S 代表start 就是启动服务的意思,后面的数字10 就是启动、停止的顺序。例如,在同一个目录下,你还 可以看到 S80postfix 这个文件,80 就是顺序在 10 以后,因为没有启动网络的情况下,启动postfix 是没有何作用的。

  再看一下 /etc/rc.d/rc3.d,可以看到文件S60nfslock,但是这个文件不存在于 /etc/rc.d/rc2.d目录下。NFS 要用到这个文件,一般用在多用户环境下,所以放在rc3.d 目录下。

  另外,在/etc/rc.d/rc2.d 还可以看到那些K 开头的文件,例如

  /etc/rc.d/rc2.d/K45named ,K 代表 kill。

   标准的Linux运行级为3 或者5 ,如果是3 的话,系统就在多用户状态。如果是5的话,则是运行着X Window 系 统。如果目前正在3或5,而你把运行级降低到2的话,init 就会执行 K45named 脚本。

  不同的运行级定义如下:(可以参考Red Hat Linux 里面的/etc/inittab)

# 缺省的运行级,RHS 用到的级别如下:
# 0 - 停机(千万不要把initdefault 设置为0 )
# 1 - 单用户模式
# 2 - 多用户,但是没有 NFS
# 3 - 完全多用户模式
# 4 - 没有用到
# 5 - X11
# 6 - 重新启动 (千万不要把initdefault 设置为6 )

对各个运行级的详细解释:
0 为停机,机器关闭。
1 为单用户模式,就像Win9x 下的安全模式类似。
2 为多用户模式,但是没有NFS 支持。
3 为完整的多用户模式,是标准的运行级。
4 一般不用,在一些特殊情况下可以用它来做一些事情。 例如在笔记本电脑的电池用尽时,可以切换到这个模式来做一些设置。
5 就是 X11 ,进到 X Window 系统了。
6 为重启,运行 init 6 机器就会重启。

  不同的运行级有不同的用处,也应该根据自己的不同情形来设置。例如,如果丢失了root 口令,那么可以让机 器启动进入单用户状态来设置。在启动后的 lilo 提示符下输入:
init=/bin/sh rw
  或者输入:
linux single

   就可以使机器进入运行级1 ,并把 root 文件系统挂为读写。他会跳过所有系统认证,让你使用passwd 程序来改变root口令。

用chkconfig管理启动程序

  就如前面的介绍,Linux 可以有多种运行级。常见的就是多用户的2,3,4,5 。运行级的改变可以通过 init 命令来切换。例如,假设你要维护系统进入单用户状态,那么,可以使用 init 1 来切换。在Linux 的运行级的切换过程中,系统会自动寻找对应运行 级的目录/etc/rc[0-6].d下的K 和 S 开头的文件,按后面的数字顺序,执行这些脚本。对这些脚本的维护,是很繁琐的一件事情,Linux 提供了chkconfig 命令用来更新和查询不同运行级上的系统服务。

语法为:
chkconfig --list [name]
chkconfig --add name
chkconfig --del name
chkconfig [--level levels] name
chkconfig [--level levels] name

chkconfig 有五项功能:添加服务,删除服务,列表服务,改变启动信息以及检查特定服务的启动状态。

  chkconfig 没有参数运行时,显示用法。如果加上服务名,那么就检查这个服务是否在当前运行级启动。如果是,返回 true,否则返回 false。 --level 选项可以指定要查看的运行级而不一定是当前运行级。

  如果在服务名后面指定了on,off 或者 reset,那么 chkconfig 会改变指定服务的启动信息。on 和 off 分别指服务在改变运行级时的启动和停止。reset 指初始化服务信息,无论有问题的初始化脚本指定了什么。

  对于 on 和 off 开关,系统默认只对运行级 3,4, 5有效,但是 reset 可以对所有运行级有效。指定--level 选项时,可以选择特定的运行级。

  需要说明的是,对于每个运行级,只能有一个启动脚本或者停止脚本。当切换运行级时,init 不会重新启动已经启动的服务,也不会再次去停止已经停止的服务。

选项介绍:
--level levels
指定运行级,由数字 0 到 7 构成的字符串,如:
--level 35 表示指定运行级3 和5。
--add name
这个选项增加一项新的服务,chkconfig 确保每个运行级有一项 启动(S) 或者 杀死(K) 入口。如有缺少,则会从缺省的init 脚本自动建立。
--del name
用来删除服务,并把相关符号连接从 /etc/rc[0-6].d 删除。
--list name
列表,如果指定了name 那么只是显示指定的服务名,否则,列出全部服务在不同运行级的状态。

运行级文件
  每个被chkconfig 管理的服务需要在对应的init.d 下的脚本加上两行或者更多行的注释。第一行告诉 chkconfig 缺省启动的运行级以及启动和停止的优先级。如果某服务缺省不在任何运行级启动,那么使用 - 代替运行级。第二行对服务进行描述,可以用\ 跨行注释。

例如,random.init 包含三行:
# chkconfig: 2345 20 80
# description: Saves and restores system entropy pool for \
# higher quality random number generation.

  表明 random 脚本应该在运行级 2, 3, 4, 5 启动,启动优先权为20,停止优先权为 80。与chkconfig相关的命令还有ntsysv,这个工具可以更直观的来管理/etc/rc.d/init.d下的启动脚本,决定在某个启动级别是否加载/停止某个服务。好了,介绍就到这里了,去看看自己目录下的/etc/rc.d/init.d 下的脚本吧。
 
iptables 更具体讲,是替换系统里的 /sbin/iptables* 和 /lib/iptables/* 以及 /usr/share/man/man? 那些文件
阅读(452) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~