導航:首頁 > 配伺服器 > 伺服器上init什麼意思

伺服器上init什麼意思

發布時間:2023-09-23 14:18:10

⑴ 幫忙解釋AIX中的init謝謝!

AIX(Advanced Interactive eXecutive)是IBM開發的一套UNIX操作系統。它符合Open group的UNIX 98行業標准(The Open Group UNIX 98 Base Brand),通過全面集成對32-位和64-位應用的並行運行支持,為這些應用提供了全面的可擴展性。它可以在所有的IBM ~ p系列和IBM RS/6000工作站、伺服器和大型並行超級計算機上運行。

在系統啟動過程中,在預初始化過程中裝入根文件系統之後,將發生下面這些事件:

作為啟動過程中的最後一個步驟,運行 init 命令

init 命令嘗試讀取 /etc/inittab 文件。

如果 /etc/inittab 文件存在,那麼 init 命令將嘗試在 /etc/inittab 文件中查找 initdefault 條目。

如果 initdefault 條目存在,那麼 init 命令使用指定的運行級別作為初始的系統運行級別。

如果 initdefault 條目不存在,那麼 init 命令將請求用戶從系統控制台 (/dev/console) 輸入一個運行級別。

如果用戶輸入 S、s、M、或者 m 運行級別,那麼 init 命令將進入維護運行級別。只有這些運行級別不需要經過正確格式化的 /etc/inittab 文件。

如果 /etc/inittab 文件不存在,那麼 init 命令在預設情況下將使系統進入維護運行級別。

init 命令每隔 60 秒將再次讀取 /etc/inittab 文件。如果在 init 命令上一次讀取 /etc/inittab 文件之後,其中的內容發生了更改,那麼將執行 /etc/inittab 文件中的新命令。

/etc/inittab 文件

/etc/inittab 文件用於控制初始化過程。

/etc/inittab 文件提供了相應的腳本,以使得 init 命令的角色成為通用的進程調度器。init 命令的進程調度活動中的主要進程是 /etc/getty 線路進程,它將啟動單獨終端線路。通常由 init 命令進行調度的其他進程包括守護進程和 Shell。

/etc/inittab 文件由一些與位置無關的條目組成,它們的格式如下所示:

Identifier:RunLevel:Action:Command

每個條目之間由一個換行符進行分隔。換行符前面加上一個反斜杠 (\) 表示繼續該條目。在 /etc/inittab 文件中,對於條目的數目沒有任何限制(但不能超過最大的條目大小)。最大的條目大小為 1024 個字元。

條目欄位包括:

Identifier,由一到十四個字元組成的欄位,唯一地標識一個對象。

RunLevel,可以對該條目進行處理的運行級別。
運行級別具有下面的屬性:

運行級別有效地對應於系統中的進程配置。

可以為每個由 init 命令啟動的進程分配一個或者多個運行級別(該進程可以存在於其中)。

運行級別使用數字 0 到 9 進行表示。例如,如果系統處於運行級別 1,那麼只有那些在運行級別欄位中包含 1 的條目才會啟動。

當您請求 init 命令更改運行級別時,在運行級別欄位中不包含匹配條目(對於目標運行級別)的所有進程都將接收到一個警告信號 (SIGTERM)。在使用刪除信號 (SIGKILL) 強行結束這些進程之前,有 20 秒鍾的過渡期。

通過使用從 0 到 9 的任意組合,可以選擇多個運行級別,從而在運行級別欄位中為一個進程定義多個運行級別。如果沒有指定運行級別,那麼就假定該進程在所有的運行級別中都是有效的。

在運行級別欄位中,還可能出現其他四種取值,即使它們並不是真正的運行 級別:a、b、c 和 h。僅當使用 telinit 命令請求它們運行時(無論系統當前運行級別如何),才會處理那些運行級別欄位中包含這些字元的條目。它們與運行級別的不同之處在於,init 命令不可能進入到運行級別 a、b、c 或者 h。另外,任何這些進程的執行請求都不會更改當前運行級別。而且,在 init 命令更改級別時,不會終止以 a、b 或者 c 命令開頭的進程。只有在下面三種情況下才會終止它們:在 /etc/inittab 文件中,它們所在行的操作欄位被標記為 off,從 /etc/inittab 中完全刪除它們所在的行,或者 init 命令進入到單用戶模式。

Action,用於告訴 init 命令如何處理在進程欄位中指定的進程。init 命令能識別下列的操作:

respawn:如果進程不存在,則啟動該進程。不需要等待它的結束(繼續掃描 /etc/inittab 文件)。當進程中止時,重新啟動該進程。如果該進程已經存在,則什麼也不做,繼續掃描 /etc/inittab 文件。

wait:當 init 命令進入到與該條目的運行級別相匹配的運行級別時,啟動該進程,並等待它的結束。當 init 命令處於相同的運行級別時,所有後續對 /etc/inittab 文件的讀取操作都將導致 init 命令忽略這個條目。

once:當 init 命令進入到與該條目的運行級別相匹配的運行級別時,啟動該進程,並且不需要等待它的結束。當它中止時,不重新啟動該進程。當系統進入一個新的運行級別,並且該進程的運行來自前一個運行級別更改時,不重新啟動該程序。

boot: 僅在系統啟動時(即在系統啟動的過程中當 init 命令讀取 /etc/inittab 文件的時候)處理該條目。啟動該進程,不需要等待它的結束,並且當它中止時,不重新啟動該進程。為了使得該指令有意義,運行級別應該為預設值,或者它必須 與啟動時 init 命令的運行級別相匹配。對於系統硬體重新啟動之後的初始化功能來說,這種操作是非常有價值的。

bootwait:在系統啟動之後,當 init 命令第一次從單用戶進入到多用戶狀態時,處理該條目。啟動該進程,等待它的結束;並且當它中止時,不重新啟動該進程。如果 initdefault 為 2,那麼在啟動之後運行該進程。

powerfail:僅當 init 命令接收到電源故障信號 (SIGPWR) 時,才執行與這個條目相關聯的進程。

powerwait:僅當 init 命令接收到電源故障信號 (SIGPWR) 時,才執行與這個條目相關聯的進程,並且在繼續處理 /etc/inittab 文件之前,必須等待它結束。

off:如果與這個條目相關聯的進程目前正在運行,那麼發送警告信號 (SIGTERM),等待 20 秒鍾,然後使用刪除信號 (SIGKILL) 終止該進程。如果該進程沒有運行,則忽略這個條目。

ondemand:從功能上看,與 respawn 是相同的,但是這個操作適用於 a、b 或者 c 值,而不是運行級別。

initdefault: 僅在 init 命令最初被調用時,才掃描包含這個操作的條目。init 命令使用這個條目(如果它存在的話)來確定最初要進入的運行級別。通過使用運行級別欄位中所指定的最高運行級別,就可以實現這一點,並使用它作為其初始狀 態。如果運行級別欄位為空,那麼將其解釋為「0123456789」:因此,init 命令將進入運行級別 9。另外,如果 init 命令在 /etc/inittab 文件中沒有找到 initdefault 條目,那麼將要求用戶在啟動時指定一個最初的運行級別。

sysinit:當 init 命令在登錄之前嘗試訪問控制台時,將執行這種類型的條目。在正常情況下,這個條目僅用於初始化設備(init 命令可能會對這些設備詢問有關運行級別的問題)。執行這些條目,並等待它們結束,然後再繼續。

Command: 要執行的 Shell 命令。整個命令欄位以 exec 作為前綴,然後以 sh -c exec command 的形式傳遞給一個使用 fork 系統調用生成的 sh。任何合法的 sh 命令語法都可以出現在這個欄位中。可以使用 # comment 語法插入注釋。

getty 命令將覆蓋 /etc/inittab 文件中出現在它之前的任何命令的輸出。要將這些命令的輸出記錄到啟動日誌,可以使用管道將它們的輸出傳遞給 alog -tboot 命令。

在 init 命令處理 inittab 條目時,stdin、stdout 和 stderr 文件描述符可能是不可用的。向 stdout 或者 stderr 進行寫入操作的任何條目都可能無法按照預期的方式工作,除非它們將自己的輸出重定向到一個文件或者 /dev/console。

對於修改 /etc/inittab 文件中的記錄,僅支持下列的命令:

mkitab:將記錄添加到 /etc/inittab 文件。

lsitab:列出 /etc/inittab 文件中的記錄。

chitab:更改 /etc/inittab 文件中的記錄。

rmitab:刪除 /etc/inittab 文件中的記錄。

例如,您希望向 /etc/inittab 文件添加一條記錄,以便在運行級別 2 中運行 find 命令,並且在它結束後再次啟動它:
1. 運行 ps 命令,並顯示那些僅包含單詞 find 的進程:

# ps -ef
grep find

root 19750 13964 0 10:47:23 pts/0 0:00 grep find

#

2. 使用 mkitab 命令向 /etc/inittab 添加一條名為 xcmd 的記錄:

# mkitab "xcmd:2:respawn:find / -type f > /dev/null 2>&1"

3. 使用 lsitab 命令顯示新的記錄:

# lsitab xcmd

xcmd:2:respawn:find / -type f > /dev/null 2>&1

#

4. 顯示進程:

# ps -ef
grep find

root 28972 13964 0 11:07:33 pts/0 0:00 grep find

#

5. 結束 find 進程:

# kill 25462

6. 顯示進程:

# 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 項被設置成為了 respawn,所以一個新的 find 進程(上面顯示的 28966)在前一個進程結束後又被系統啟動了。
這個進程會被不斷的重新啟動,除非把 action 項的設置修改,如:

1. 把 xcmd 這條記錄的 action 項的值從 respawn 修改為 once:

# chitab "xcmd:2:once:find / -type f > /dev/null 2>&1"

2. 顯示進程:

# 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 進程:

# kill 28970

4. 顯示進程:

# ps -ef
grep find

root 28972 13964 0 11:07:33 pts/0 0:00 grep find

#

可以看到 find 進程沒有再被系統啟動。

要從 /etc/inittab 文件中刪除這條記錄,您可以使用 rmitab 命令。例如:

# rmitab xcmd

# lsitab xcmd

#

/etc/inittab 條目的順序

在 /etc/inittab 文件中,基本條目按照如下所示的方式進行排序:

initdefault

sysinit

Powerfailure Detection (powerfail)

Multiuser check (rc)

/etc/firstboot (fbcheck)

System Resource Controller (srcmstr)

Start TCP/IP daemons (rctcpip)

Start NFS daemons (rcnfs)

cron

pb cleanup (piobe)

getty for the console (cons)

必須在 etc/inittab 文件的開始處附近啟動系統資源控制器(System Resource Controller,SRC),因為需要 SRC 守護進程來啟動其他進程。因為 NFS 需要 TCP/IP 守護進程正確地運行,所以應該在啟動 NFS 守護進程之前啟動 TCP/IP 守護進程。/etc/inittab 文件中的條目根據依賴關系進行排序,這意味著,如果一個進程 (process2) 的正常運行需要另一個進程 (process1) 的存在,那麼在 /etc/inittab 文件中,process1 的條目應該出現在 process2 的條目之前。

閱讀全文

與伺服器上init什麼意思相關的資料

熱點內容
雙分錄核演算法反映什麼 瀏覽:210
ubuntuphpaptget 瀏覽:256
安卓手機快充需要什麼數據線 瀏覽:795
程序中存在未轉換未編譯部分 瀏覽:323
編譯匯編鏈接優化 瀏覽:83
程序員打字和作家哪個打字快 瀏覽:579
安卓手機怎麼用cad命令行 瀏覽:385
2200工程機接收命令瞬間消失 瀏覽:255
壓縮機工藝管是多大的 瀏覽:314
安卓刷什麼系統穩定 瀏覽:37
程序員寫炫酷代碼 瀏覽:933
大話存儲pdf 瀏覽:526
中銘機器人怎麼編程 瀏覽:812
把字母變為數字的加密法 瀏覽:523
噬血狂襲第三季哪個app能看 瀏覽:422
江蘇螺桿壓縮機 瀏覽:981
android底部彈出對話框 瀏覽:502
怎麼查伺服器同行fc號 瀏覽:1001
什麼伺服器雲鳥最便宜 瀏覽:221
vs編譯器反匯編 瀏覽:571