Linux啟動和關閉時自動執行的所有腳本文件


 

          

         Linux 使用的是基於運行級(run-levels) 概念的稱為 SysVinit 的專用啟動工具。 它在不同的系統上可能是完全不一樣的, 所以不能認為一個腳本在某個 Linux 發行版上工作正常。

         SysVinit(從現在開始我們稱之為"init")以運行級的模式來工作,一般有 7 (從 0 6)個運行級 (實際上可以有更多的運行級,但都是用於特殊情況而且一般使用不到。 參見 init(8)以獲得更多信息),每個運行級對應於一套設定好的任務, 當啟動一個運行級的時候, 計算機就需要執行相應的任務。 默認的運行級是 3,下面是對不同運行級的描述:

0: 關閉計算機
1: 
單用戶模式
2: 
無網絡多用戶模式
3: 
有網絡多用戶模式
4: 
保留作自定義,否則同運行級
5: 
同運行級 4,一般用於圖形界面(GUI)登錄(如 X的 xdm 或 KDE的 kdm) 
6: 
重啟動計算機

       用來改變運行級別的命令是init <runlevel>,在這里 <runlevel>是目標運行級別。

   在 /etc/rc.d 目錄下有很多類似 rc?.d (這里 ? 是運行級別的數值) 和 rcsysinit.d 的目錄, 里面都包含許多符號鏈接,其中一些以 K 字母開頭,另外一些以 S 字母開頭, 這些鏈接名在首字母后面都跟着兩個數字。 這個 K 的含義是停止 (kill) 一個服務, S 的含義是啟動一個服務。而數字則確定這些腳本的啟動順序,從 00 到 99(數字越小執行的越早)。 當 init 轉換到其它運行級時, 一些相應的服務會停止, 而另一些服務則會啟動。

     真正的腳本在 /etc/rc.d/init.d 目錄下, 它們完成實際工作, 符號鏈接都是指向它們的。 停止腳本的鏈接和啟動腳本的鏈接都指向 /etc/rc.d/init.d 目錄下的同一個腳本。 這是因為調用這些腳本時可以使用不同的參數,例如 start, stop, restart, reload, 和 status。 當調用 K 鏈接時,相應的腳本用 stop參數運行;當調用 S 鏈接時,相應的腳本用start 參數運行。

     上面的說明有一個例外,在 rc0.d 和 rc6.d 目錄下以 S 開頭的鏈接不會啟動任何東西, 而是用stop參數調用, 來停止某些服務。 這背后的邏輯是, 當用戶要重啟或關閉系統的時候, 不會要啟動什么服務, 只會要系統停止。

以下是腳本參數的描述:

start
啟動服務。
stop  
          停止服務。
restart
關閉服務,然后再啟動。
reload
該服務的配置已更新。如果修改了某個服務的配置文件,又不必重啟這個服務的時候, 可以使用這個參數
status
顯示服務的狀態,如果服務正在運行,會顯示該服務進程的 PID

     您可以自由修改啟動進程工作的方式。 我們這里給出的文件只是它們怎樣工作的一個示例而已。


Linux的開機的整個過程如下:

  1. 開電腦電源,BIOS 並進行主的自我測試

  2. 透過 BIOS 取得第一個可開機裝置,讀取主要開機區 (MBR) 取得開機管理程式;

  3. 透過開機管理程式的設定,取得 kernel 並載入記憶體且偵測系統硬體;

  4. 核心主動呼叫 init 程式;

  5. init 程式開始執行系統初始化 (/etc/rc.d/rc.sysinit)

    執行/etc/init.d/functions ,設置環境變量等。

  6. 依據 init 的設定進行 daemon start (/etc/rc.d/rc[0-6].d/*)

    依次執行腳本,啟動服務。關機時依次關閉服務。

  7. 載入本機設定 (/etc/rc.d/rc.local)

     /etc/profile文件。這個文件是系統啟動時,任何用戶登錄時執行的文件。任何用戶登錄前,root用戶也會執行一遍。

     ~/.bash_profile文件。這個文件每個用戶都有。它在用戶登錄時自動執行,擁有用戶的權限。它export的環境變量對該用戶隨后啟動的進程都有效。

 

     因此,如果用戶需要開機自動以root權限執行一些腳本,那么最好的方法是編輯/etc/rc.d/rc.local文件。

      如果每一個用戶登錄時都應該執行的腳本,如設置一些環境變量。那么應該修改/etc/profile文件。

     如果某一個特定用戶登錄時應該執行特定的腳本,如設置該用戶特定的環境變量,應該修改~/.bash_profile文件。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM