/etc/inittab 文g控制着初始化过E?/font>
/etc/inittab 文g?init 命o提供脚本作ؓ一个普通进E调度程序。构?init 命oq程调度zd的主要(多数Q进E是 /etc/getty U进E(line processQ,发vQ启动)专用U进E。被 init 命o特别调度的其他进Eؓ后台q程QDaemonQ和shell?/font>
/etc/inittab 文g?位置相关Qposition-dependent Q的条目l成Q格式如下:
Identifier:RunLevel:Action:Command
每一个条目都被一个换行字W分隔。一个换行字W前面一个反斜杠 (\) 表示一个条目的延箋?etc/inittab 文g中的条目数目没有限制Q而不是指条目的最大长度)。条目的最大长度是 1024 个字W?/font>
条目字段有:
IdentifierQ?标识唯一对象的一?1-4 位字W的字段?br>RunLevelQ?该条目运行的U别?br>q行U别有下列属性:
- q行U别有效地符合系l进E的配置?br> - ?init 命o启动的每一个进E都被分配一个或多个该进E可存在于之的运行别?br> - q行U别?0-9 的数字来表示。例如,如果pȝq行于?1Q只有在q行U别字段?1 的那些条目被启动?br> - h init 命o改变q行U别Ӟ条目中运行别字D与目标q行U别不匹配的所有进E都会收C条警告信?(SIGTERM)Q在q程被删除符PEkill signal (SIGKILL)Q强行终止前Q有20U的宽限期?br> - q行U别字段可ؓ一个进E定义多个运行别,可以0-9的Q意组合。如果没有指定运行别,q程假定在所有的q行U别有效?br> - q有其他四个g出现在运行别字D,即他们q不是真正的q行U别Qa, b, c ?h。在q行U别字段有这些字W的条目仅仅在telinit 命oh时才q行Q与当前的系l运行别无养I。他们不同于init命o的运行别,init命o永远不能q入a, b, c, h q行U别。ƈ且,所有这些进E的q行h都不改变当前的运行别。此外,init 命o改变U别Ӟ由a, b, c 命o启动的进Eƈ不断开QkilledQ。只有当 /etc/inittab 文g中他们的行在action字段标记?offQ他们的行从 /etc/inittab 文g中完全删除,或者init 命oq入单用h式,q些q程才会被中断(killedQ?br>Action: 告知 init 命o如何处理?process 字段指定的进E。init 命o可识别的 actions 如下Q?br> respawnQ?如果q程不存在,则启动进E。却不等待进E终止(l箋扫描 /etc/inittab 文gQ。如q程LQ则重启该进E。如q程存在Ql扫?/etc/inittab 文g?br> waitQ??init 命oq入匚w某条目的q行U别Ӟ启动该进Eƈ{待该进E的l止。当init命o处于同样的运行别时Q所有对 /etc/inittab 文g随后的读取都会导?init 命o忽略该条目?br> onceQ??init 命oq入匚w某条目的q行U别Ӟ启动该进E,q且不等待终止。当q程LӞ也不重启该进E。当pȝq入一个新的运行别时Q该q程仍然从之前运行别的变化q行Q程序也不重启?br> bootQ?只在pȝ引导q程中运行的条目Q这些进E是pȝ启动q程中,init 命o?/etc/inittab 文g中读取的。启动该q程Q不{待q程l止Qƈ且进E死掉时Q也不重启进E。有意义的指gơؓQ运行别应为默认,或者必Mpȝ引导?init 命o的运行别匹配。此 action 对于pȝg重启后的初始化功能非常有用?br> bootwaitQ?pȝ引导后,init 命o从单用户到多用户状态,W一ơ运行的条目。启动该q程Qƈ{其l止Q进E死Ӟ不重启该q程。如?initdefault?2 Q则pȝ引导后直接运行该q程?br> powerfailQ?只有?init 命o收到一个电源故障信?SIGPWR)的时候,才执行与此条目相关的q程?br> powerwaitQ?只有?init 命o收到一个电源故障信?SIGPWR)的时候,才执行与此条目相关的q程。ƈ{该q程l止Q才l箋处理 /etc/inittab 文g?br> offQ?如果与该条目相关的进E当前正在运行,发送一个警告信?SIGTERM)Q然后等?20 U才?kill 信号QSIGKILLQ终止该q程。如果进E不在运行,忽略该条目?br> ondemandQ?功能上与 respawn 相同Q不q,?action 应用 a, b, ?c |而不用运行别?br> initdefaultQ?init 命o只在 最初调用时才扫描与?action 相关的条目。如果存在,init 命o使用该条目来军_初始q入的运行别。一般情况下Q用run-level 字段中指定的最高运行别来作ؓ初始状态。如果运行别字DؓI,则认?123456789Q因此,init 命oq入q行U别 9 。另外,如果 init 命o?/etc/inittab 文g中找不到initdefault 条目Q则在引导时向用戯求一个初始的q行U别?br> sysinitQ?此类型的条目在登录前 init 命o正要讉K控制C前被执行。该条目只被用来初始化设备,init 命o可能会针对这些设备询问运行别。这些条目被执行Qƈ{待完成后才l箋?/font>
CommandQ?可执行的壻IshellQ命令。整?command 字段?exec 为前~Qƈ传给一?forked sh成ؓ sh -c exec 命o。Q何合法的 sh 命o语法都可出现在该字段。ƈ可用 # 插入注释?/font>
getty 命o覆写 /etc/inittab 文g中出现在它之前所有命令的输出。要在引导日志中记录q些命o的输出,可输送这些输出到 alog -tboot 命o?/font>
?init 命o正在处理 inittab 条目Ӟstdin, stdout, ?stderr q些文g描述W(file descriptorsQ可能是不可用的。所有写?stdout ?stderr 的条目不起作用,除非把输出重定向C个文件或者到 /dev/console?/font>
下列命o是唯一支持?/etc/inittab 文g中修改记录的ҎQ?br>mkitabQ?把记录添加到 /etc/inittab 文g?br>lsitabQ?列出 /etc/inittab 文g中的记录?br>chitabQ?修改 /etc/inittab 文g中的记录?br>rmitabQ??/etc/inittab 文g中删除记录?/font>
例如Q想?/etc/inittab 文g中添加一条记录,以运行?Qrun level 2Q运?find 命oq之一旦完成就再次启动?br>1. q行 ps 命oQ只昄包含 find 的进E:
# ps -ef | grep find
root 19750 13964 0 10:47:23 pts/0 0:00 grep find
#
2. 使用 mkitab 命oQ在 /etc/inittab 文g中添加一个名?xcmd 的记录:
# mkitab "xcmd:2:respawn:find / -type f > /dev/null 2>&1"
3. 使用 lsitab 命o昄新记录:
# lsitab xcmd
xcmd:2:respawn:find / -type f > /dev/null 2>&1
#
4. 查看q程Q?br># ps -ef | grep find
root 25462 1 6 10:56:58 - 0:00 find / -type f
root 28002 13964 0 10:57:00 pts/0 0:00 grep find
#
5. 取消 find 命oq程Q?br># kill 25462
6. 查看q程Q?br># ps -ef | grep find
root 23538 13964 0 10:58:24 pts/0 0:00 grep find
root 28966 1 4 10:58:21 - 0:00 find / -type f
#
本例中,׃ action 字段被配|?respawnQ故而每一ơ该命o一完成Q一个新q程׃启动?/font>
该进E将l箋再生 Qre-spawningQ,除非修改 action 字段Q例如:
1. 把记?xcmd ?action 字段?respawn 修改?onceQ?br># chitab "xcmd:2:once:find / -type f > /dev/null 2>&1"
2. 查看q程Q?br># ps -ef | grep find
root 20378 13964 0 11:07:20 pts/0 0:00 grep find
root 28970 1 4 11:05:46 - 0:03 find / -type f
3. 取消 find 命oq程Q?br># kill 28970
4. 查看q程Q?br># ps -ef | grep find
root 28972 13964 0 11:07:33 pts/0 0:00 grep find
#
要从 /etc/inittab 文g中删除该记录Q可使用 rmitab 命o。例如:
# rmitab xcmd
# lsitab xcmd
#
/etc/inittab 条目的次?/font>
/etc/inittab 文g中的基本q程条目ơ序安装如下Q?br>1. initdefault
2. sysinit
3. Powerfailure Detection (powerfail)
4. Multiuser check (rc)
5. /etc/firstboot (fbcheck)
6. System Resource Controller (srcmstr)
7. Start TCP/IP daemons (rctcpip)
8. Start NFS daemons (rcnfs)
9. cron
10.pb cleanup (piobe)
11.getty for the console (cons)
pȝ资源控制?(SRC)必须?/etc/inittab 文g的开头附q就被启动,因ؓ启动其他的进E需要SRCq程QDaemonQ?br>׃NFS需要TCP/IPq程QDaemonQ才能正常运行,所以TCP/IPq程必须在NFSq程之前被启动?br>/etc/inittab 文g中的条目按相互依赖性排序,是_如果一个进E(process2Q需要另外一个进E(process1Q存在才能正常运行,那么?/etc/inittab文g中,process1的条目应该在process2的条目之前?/font>

]]>