Linux中/etc/inittab文件

1. inittab基本概念

a) init進程:

  • Linux在完成核內引導(內核鏡像已被載入內存,開始運行,並已初始化所有的設備驅動程序和數據結構等)之後,接着通過啓動一個用戶級程序init來啓動其他用戶級的進程或服務.
  • init始終是系統的第一個進程,其PID始終爲1(ps -aux | less),它是系統所有進程的父進程.
  • 內核會查詢init所在的位置,在Linux系統中存儲在/sbin/init.如果內核找不到init,它就會試着運行/bin/sh,如果運行失敗,系統的啓動也會失敗.(存儲位置如下所示):

           

b) inittab文件:

  • init程序需要讀取配置文件/etc/inittab來作爲進程運行的參數.
  • inittab是一個不可執行的文本文件,它有若干行指令所組成.

          

 1 # /etc/inittab: init(8) configuration.
 2 # $Id: inittab,v 1.91 2002/01/25 13:35:21 miquels Exp $
 3 
 4 # The default runlevel.
 5 id:5:initdefault:
 6 
 7 # Boot-time system configuration/initialization script.
 8 # This is run first except when booting in emergency (-b) mode.
 9 si::sysinit:/etc/init.d/rcS
10 
11 # What to do in single-user mode.
12 ~~:S:wait:/sbin/sulogin
13 
14 # /etc/init.d executes the S and K scripts upon change
15 # of runlevel.
16 #
17 # Runlevel 0 is halt.
18 # Runlevel 1 is single-user.
19 # Runlevels 2-5 are multi-user.
20 # Runlevel 6 is reboot.
21 
22 l0:0:wait:/etc/init.d/rc 0
23 l1:1:wait:/etc/init.d/rc 1
24 l2:2:wait:/etc/init.d/rc 2
25 l3:3:wait:/etc/init.d/rc 3
26 l4:4:wait:/etc/init.d/rc 4
27 l5:5:wait:/etc/init.d/rc 5
28 l6:6:wait:/etc/init.d/rc 6
29 # Normally not reached, but fallthrough in case of emergency.
30 z6:6:respawn:/sbin/sulogin
31 #S:2345:respawn:/sbin/getty 115200 ttyO0
32 S:2345:respawn:/sbin/getty 115200 ttyPS0
33 # /sbin/getty invocations for the runlevels.
34 #
35 # The "id" field MUST be the same as the last
36 # characters of the device (after "tty").
37 #
38 # Format:
39 #  <id>:<runlevels>:<action>:<process>
40 #
41 1:2345:respawn:/sbin/getty 38400 tty1
View Code

2. inittab文件格式

/etc/inittab文件中每個登記項的結構都是一樣的,共分爲以冒號“:”分隔的4個字段.具體如下:

<id>:<runlevels>:<action>:<process>

其中,各字段以及與其相關的說明如下:

identifier: 登記項標識符,最多爲4個字符.用於惟一地標識/etc/inittab文件中的每一個登記項。

run_level:系統運行級,即執行登記項的init級別.用於指定相應的登記項適用於哪一個運行級,即在哪一個運行級中被處理.如果該字段爲空,那麼相應的登記項將適用於所有的運行級.在該字段中,可以同時指定一個或多個運行級,其中各運行級分別以數字0.1.2.3.4.5.6或字母a、b、c表示,且無需對其進行分隔。

action: 動作關鍵字.用於指定init(M)命令或進程對相應進程(在“process”字段定義)所實施的動作.具體動作包括:

  • boot:只有在引導過程中,才執行該進程,但不等待該進程的結束;當該進程死亡時,也不重新啓動該進程.
  • bootwait:只有在引導過程中,才執行該進程,並等待進程的結束:當該進程死亡時,也不重新啓動該進程.實際上,只有在系統被引導後,並從單用戶方式進入多用戶方式時,這些登記項才被處理;如果系統的默認運行級設置爲2(即多用戶方式),那麼這些登記項在系統引導後將馬上被處理.
  • initdefault:指定系統的默認運行級.系統啓動時,init將首先查找該登記項.如果存在init將據此決定系統最初要進入的運行級.具體來說,init將指定登記項“run_level"字段中的最大數字(即最高運行級)爲當前系統的默認運行級;如果該字段爲空,那麼將其解釋爲“0123456”,並以“6”作爲默認運行級.如果不存在該登記項,那麼init將要求用戶在系統啓動時指定一個最初的運行級.
  • off:如果相應的進程正在運行,那麼就發出一個警告信號,等待20秒後,再通過殺死信號強行終止該進程.如果相應的進程並不存在那麼就忽略該登記項.
  • once:啓動相應的進程,但不等待該進程結束便繼續處理/etc/inittab文件中的下一個登記項;當該進程死亡時,init也不重新啓動該進程.注意:在從一個運行級進入另一個運行級時,如果相應的進程仍然在運行,那麼init就不重新啓動該進程.
  • ondemand:與“respawn”的功能完全相同,但只用於運行級爲a、b或c的登記項.
  • powerfail:只在init接收到電源失敗信號時執行相應的進程,但不等待該進程結束.
  • powerwait:只在init接收到電源失敗信號時執行相應的進程,並在繼續對/etc/inittab文件進行任何處理前等待該進程結束.
  • respawn:如果相應的進程還不存在,那麼init就啓動該進程,同時不等待該進程的結束就繼續掃描/etc/inittab文件;當該進程死亡時,init將重新啓動該進程.如果相應的進程已經存在,那麼init將忽略該登記項並繼續掃描/etc/inittab文件.
  • sysinit:只有在啓動或重新啓動系統並首先進入單用戶時,init才執行這些登記項.而在系統從運行級1-6進入單用戶方式時,init並不執行這些登記項."action”字段爲“sysinit”的登記項在“run_level”字段不指定任何運行級.
  • wait:啓動進程並等待其結束,然後再處理/etc/inittab文件中的下一個登記項.

process: 所要執行的shell命令.任何合法的shell語法均適用於該字段.

3. Reference

https://www.cnblogs.com/jason-lu/articles/3272963.html

https://blog.csdn.net/pengrui18/article/details/49757451

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章