天天看點

inittab - 與 sysv 相容的 init 程序使用的初始化檔案格式

描述

inittab 檔案描述在系統引導及通常的操作期間, 都啟動哪些程序 (比如 /etc/init.d/boot, /etc/init.d/rc, getty 等等). Init(8) 讨論有關 runlevels (運作級) 的概念, 每一個運作級都有它自己啟動程序的集合. 有效的運作級為 0-6 加上用于 ondemand 條目的 A, B 和 C. inittab 檔案中的每一個條目有如下的格式:

id:runlevels:action:process

以 `#' 開頭的行被忽略.

id

inittab 檔案中條目的唯一辨別, 限于 1-4 個字元 (如果是用版本号小于 5.2.18 或 a.out 的庫編譯生成的 sysvinit 程式, 則僅限于 2 個字元).

注意: 對于 getty 或其它的注冊程序, id 必須是響應的終端線路的 tty 字尾, 如 1 響應 tty1, 否則, 注冊過程不能正常的工作.

runlevels
列出發生指定動作的運作級.
action
描述要發生的動作.
process
要執行的程序. 如果 process 域以一個 `+' 開頭, init 不會在 utmp 和 wtmp 檔案中為此程序記帳. 這是由于 getty 自己主持 utmp/wtmp 記帳的需要, 同時這也是一個曆史遺留的漏洞.

runlevels 域可以包含表示不同運作級的多個字元, 例如 123 表示本程序在運作級為 1, 2 和 3 時都要啟動. 用于 ondemand 條目的 runlevels 域可以包含 A, B, 或 C. 用于 sysinit, boot, 和 bootwait 條目的 runlevels 域被忽略.

當改變運作級時, 在新運作級中沒有給出的那些正在運作的程序被殺死, 先使用 SIGTERM 信号, 然後是 SIGKILL.

action 域可以使用的動作有:

respawn
該程序隻要終止就立即重新啟動 (如 getty).
wait
隻要進入指定的運作級就啟動本程序, 并且 init 等待該程序的結束.
once
隻要進入指定的運作級就啟動一次本程序.
boot
在系統引導期間執行本程序. runlevels 域被忽略.
bootwait
在系統引導期間執行本程序. 并且 init 等待該程序的結束 (如 /etc/rc). runlevels 域被忽略.
off
什麼也不做.
ondemand
在進入 ondemand 運作級時才會執行标記為 ondemand 的那些程序. 無論怎樣, 實際上沒有改變運作級 (ondemand 運作級就是 `a', `b', 和 `c').
initdefault
initdefault 條目給出系統引導完成後進入的運作級, 如果不存在這樣的條目, init 就會在控制台詢問要進入的運作級. process 域被忽略.
sysinit
系統引導期間執行此程序. 本程序會在 boot 或 bootwait 條目之前得到執行. runlevels 域被忽略.
powerwait
本程序在電源不足時執行. 通常在有程序把 UPS 和計算機相連時通知 init 程序, Init 在繼續其它工作之前要等待此程序結束.
powerfail
類似 powerwait, 但是init 不等待此程序完成.
powerokwait
在 init 收到電源已經恢複的通知後立即執行此程序.
powerfailnow
本程序在 init 被告知 UPS 電源快耗盡同時外部電源失敗 (無效) 時被執行. (假設 UPS 和監視程序能夠發現這樣的情況).
ctrlaltdel
在 init 收到 SIGINT 信号時執行此程序. 這意味着有人在控制台按下了 CTRL-ALT-DEL 組合鍵, 典型地, 可能是想執行類似 shutdown 然後進入單使用者模式或重新開機機器.
kbrequest

本程序在 init 收到一個從控制台鍵盤産生的特殊組合按鍵信号時執行.

對于此功能本文檔尚未完成; 可以在 kbd-x.xx 包中找到更多資訊 (在寫作本文檔時最新的是 kbd-0.94). 當然你可能想為某些 "KeyboardSignal" 行為映射組合鍵, 如為了映射 (Alt-上箭頭) 可以在鍵盤映射檔案中 使用如下的方式:

alt keycode 103 = KeyboardSignal

舉例

這是一個與老的 Linux inittab 檔案類似的例子檔案:

# inittab for linux
id:1:initdefault:
rc::bootwait:/etc/rc
1:1:respawn:/etc/getty 9600 tty1
2:1:respawn:/etc/getty 9600 tty2
3:1:respawn:/etc/getty 9600 tty3
4:1:respawn:/etc/getty 9600 tty4
      

本檔案在引導時執行 /etc/rc 并且在 ty1-tty4 上啟動 getty 程序.

一個更詳盡的 inittab 會有不同的運作級 (參考本身的注釋):

# 進入預設的運作級
id:2:initdefault:

# 在進行其它工作之前先完成系統初始化.
si::sysinit:/etc/rc.d/bcheckrc

# 運作級 0 挂起系統, 6 重新開機, 1 單使用者模式.
l0:0:wait:/etc/rc.d/rc.halt
l1:1:wait:/etc/rc.d/rc.single
l2:2345:wait:/etc/rc.d/rc.multi
l6:6:wait:/etc/rc.d/rc.reboot

# "3 個鍵" 按下時要做的工作.
ca::ctrlaltdel:/sbin/shutdown -t5 -rf now

# 運作級2和3: 在控制台生成 getty 程序, 運作級為3時在 modem 上生成 getty.
1:23:respawn:/sbin/getty tty1 VC linux
2:23:respawn:/sbin/getty tty2 VC linux
3:23:respawn:/sbin/getty tty3 VC linux
4:23:respawn:/sbin/getty tty4 VC linux
S2:3:respawn:/sbin/uugetty ttyS2 M19200

      

檔案

繼續閱讀