Linux啟動/關機時執行指令碼

guyuanli發表於2016-03-18
在.login中執行相應命令,或在.bashrc(用tcsh shell,在.tcshrc)裡寫命令。是不行的,.login是在使用者登入時執行,使用者可能在本地無需登入,或者在遠端多個使用者登入,多次登入;而.tcshrc是在shell啟動時執行,登入後使用者一般會多次開啟shell,這樣該命令或程式就會被多次執行。

Linux 啟動順序:

1、 BIOS自檢

2、 執行系統核心並檢測硬體

3、 執行系統的第一個程式init

4、 init讀取系統引導配置檔案/etc/inittab中的資訊進行初始化

/etc/rc.d/rc.sysinit------系統初始化指令碼

/etc/rc.d/rcX.d/[KS]*------根據執行級別配置服務

/etc/rc.d/rc.local---------執行本地特殊配置

其它---------不同執行級別的特殊服務

Linux啟動執行init程式來啟動相關程式初始化,與啟動相關的一個概念是執行級,執行級是作業系統當前執行的級別,在不同執行級別上可以定義屬於該執行級的啟動程式,系統的執行級別可以在/etc/inittab檔案指定,與執行級相關執行程式透過從源/etc/rc.d/init.d下連結到目的/etc/rcX.d,這裡X為系統的預設執行級別,因此,預設的啟動指令碼放在/etc/rc.d/init.d下。

事例,任務在啟動時執行mm:

方法:

1. 建立自啟動指令碼/etc/rc.d/init.d/mm,內容為:

#!/bin/bash

/usr/local/bin/*  (注:此內容替換為你想執行的命令)

設定檔案的屬性為可執行:

#chmod +x /etc/rc.d/init.d/mm

2. 檢視計算機執行級別,在檔案/etc/inittab裡看到id:3:initdefault:,則此係統執行級別為3。

3. 到/etc/rc3.d目錄下,把你要執行的可執行檔案做一個軟連線,而且在命名的時候要以大寫S字母開頭,S之後的數字大小代表執行順序的先後,數字越大越靠後執行。

#ln -s /etc/rc.d/init.d/mm /etc/rc3.d/S100mm

#ln -s /etc/rc.d/init.d/mm /etc/rc0.d/K20mm

關機執行指令碼:

 1. vi /etc/init.d/mm 

     #!/bin/bash

     ls >/dev/null 2>&1  (此處把ls替換為你自己的內容)

  注意:此處的順序不能更改,否則達不到想要的效果。此時先將標準輸出重定向到 /dev/null,然後將標準錯誤重定向到標準輸出,由於標準輸出已經重定向到了/dev/null,因此標準錯誤也會重定向到/dev/null。

 2. chmod +x /etc/init.d/mm

 3. ln -s /etc/init.d/mm  /etc/rc6.d/K01mm /var/lock/subsys/

 4. 當你在關機時一切在悄無聲息的進行著。

注:(1)本人在實驗時,做關機執行指令碼不成功解決方法。是在 /var/lock/subsys/中建立相同的檔案mm,或複製或者直接軟連結過來 ln -s /etc/init.d/mm /var/lock/subsys/   。

    (2)若在字元介面下只設定開機啟動,只在rc3.d目錄下連結S100filename便可。
           如:ln -s /etc/init.d/filename  /etc/rc3.d/S100filename

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7490392/viewspace-2059565/,如需轉載,請註明出處,否則將追究法律責任。

相關文章