Linux系統執行級別和init d指令碼

2021-08-31 05:40:44 字數 1911 閱讀 3690

一、概述

/etc/init.d目錄下包含的指令碼檔案,在系統

啟動時或更改執行級別時由init程序執行。

在/etc/rc?.d目錄下的符號鏈結檔案的名字命名規則是:

s

mmscript

或者k

mmscript

mm是兩位數,script是指令碼的名字,這個名字和其指向在init.d目錄下真正的指令碼名字一致。如/etc/rc2.d/s12starteb 對應的 /etc/init.d/starteb。

當init程序改變到乙個執行級別n,rcn.d目錄下的指令碼就會被執行,首先,執行以k開頭的指令碼,指令碼執行引數是stop,然後,執行以s開頭的指令碼,指令碼執行引數是start,k表示殺死某項服務,而s代表開啟某項服務。

例如,我們從執行級別2切換到執行級別3,init程序就會首先執行rc3.d目錄下所有以k開頭的指令碼,引數為stop,然後執行rc3.d目錄下所有以s開頭的指令碼,引數為start。

mm代表的兩位數,用於決定執行這些指令碼的順序,數值越小,越先被執行。例如,k20指令碼將會先於k30指令碼執行。這被用於某些服務必須先於其他服務執行的情況。例如,bind服務必須先於inn服務執行,在這種情況下,bind的指令碼數值就應該比inn服務的小,像這樣:

/etc/rc2.d/s17bind

/etc/rc2.d/s70inn

有兩個執行級別,0(halt)和6(reboot)有一些不同。在這兩個執行級別中,以s開頭的指令碼仍然是在以k開頭的指令碼之後呼叫,但他們的引數全都是stop,而不是start。

二、書寫指令碼

系統啟動或者更改執行級別時需要開啟或者關閉的服務,其指令碼應該放置在/etc/init.d目錄下,這些指令碼可以接收乙個引數,這個引數可以是:

start 開啟服務

stop 關閉服務

restart 如果服務在執行,關閉並重啟服務;如果服務沒有在執行,開啟服務

init.d目錄下的所有指令碼都應該支援start,stop,restart,force-reload引數,而reload引數是可選的。

init.d目錄下的所有指令碼必須保證足夠健壯,比如當某個服務正在執行的時候,呼叫start,它應該能夠正確返回而且不會產生多個該服務的拷貝,還有當某服務不在的時候呼叫stop也不會出錯。

在init.d目錄下的指令碼中應該小心使用set -e。書寫正確的init.d指令碼必須接受各種各樣的錯誤退出狀態。通用的init.d函式庫對於呼叫set -e不夠安全,因而在init.d指令碼中,盡量避免使用set -e,取而代之,分開檢測每條命令的結果。

三、指令碼示例

/etc/rc2.d/s12starteb -> /etc/init.d/starteb

#!/bin/sh

name=startwpa.sh

path=$path:/usr/local/sbin

start_it_up()

shut_it_down()

reload_it()

{}case "$1" in

start)

start_it_up

;;stop)

shut_it_down

;;status)

status_of_proc

;;reload|force-reload)

reload_it

;;restart)

shut_it_down

start_it_up

;;*)

echo "usage: /etc/init.d/$name " >&2

exit 2

;;esac

參考:

9.3 system run levels and 

init.d

scripts

linux系統執行級別

級別 系統 說明centos6 centos6s使用 centos7 centos7使用 0關機狀態 runlevel0 init 0 1 2 3 4 5 6 poweroff.target init 0 1 2 3 4 5 6 或systemctl isolate multi user.targe...

Linux系統執行級別

執行級0 關機。執行級1 單使用者模式,系統出現問題時可使用這種模式進入系統維護,典型的使用場景是在忘記root密碼時可進入此模式修改root密碼。執行級2 多使用者模式,但是沒有網路連線。執行級3 完全多使用者模式,這也是linux伺服器最常見的執行級。執行級4 保留未使用。執行級5 視窗模式,支...

Linux系統的執行級別

init是由核心啟動的使用者級程序,rhel7以systemd代替。在 etc rc.d 目錄下有7個目錄,對應7個執行級別,這些目錄下都是符號鏈結檔案,指向 etc rc.d init.d 目錄下的service指令碼檔案。系統開機後,會根據指定的執行級別進入指定的目錄檔案,並按順序執行。指令碼檔...