天天看點

Linux RedHat下添加自啟動腳本的幾種方式

Linux RedHat下添加自啟動腳本的幾種方式

在配置自啟動腳本之前我們需要知道Linux系統啟動的過程

其中啟動的前三步BIOS自檢,啟動GRUB/LILO,加載核心,與本文無關,略過……

一、執行init程序

init程序是系統所有程序的起點,核心在完成核内引導以後,即在本程序空間内加載init程式,它的程序号是1。Init程序是所有程序的發起者和控制者。因為在任何基于Linux的系統中,它都是第一個運作的程序,是以init程序的編号(PID)永遠是1。

init程序有以下兩個作用。

init程序的第一個作用是扮演終結父程序的角色。因為init程序永遠不會被終止,是以系統總是可以确信它的存在,并在必要的時候以它為參照。如果某個程序在它衍生出來的全部子程序結束之前被終止,就會出現必須以init為參照的情況。此時那些失去了父程序的子程序就都會以init作為它們的父程序。

init的第二個作用是在進入某個特定的運作級别時運作相應的程式,以此對各種運作級别進行管理。它的這個作用是由/etc/inittab檔案定義的。

二、通過/etc/inittab檔案進行初始化

Init的工作是根據/etc/inittab來執行相應的腳本,進行系統初始化,如設定鍵盤、字型、裝載子產品,設定網絡等。

1./etc/rc.d/rc.sysinit

在init的配置檔案中有如下一行:

si::sysinit:/etc/rc.d/rc.sysinit

rc.sysinit是由init執行的第一個腳本,它主要完成一些系統初始化的工作。rc.sysinit是每一個運作級别都要首先運作的重要腳本,它主要完成的工作有:激活交換分區、檢查磁盤、加載硬體子產品以及其他一些需要優先執行的任務。/etc/rc.d/ rc.sysinit主要完成各個運作模式中相同的初始化工作。包括:

設定初始的$PATH變量;

配置網絡;

為虛拟記憶體啟動交換;

調協系統的主機名;

檢查root檔案系統,以進行必要的修複;

檢查root檔案系統的配額;

為root檔案系統打開使用者群組的配額;

以讀/寫的方式重新裝載root檔案系統;

清除被裝載的檔案系統表/etc/mtab;

把root檔案系統輸入到mtab;

使系統為裝入子產品做準備;

查找子產品的相關檔案;

檢查檔案系統,以進行必要的修複;

加載所有其他檔案系統;

清除/etc/mtab、/etc/fastboot和/etc/nologin;

删除UUCP和lock檔案;

删除過時的子系統檔案;

删除過時的pid檔案;

設定系統時鐘;

激活交換分區;

初始化串行端口;

裝入子產品。

2./etc/rc.d/rcX.d/[KS]

在rc.sysinit執行後,将傳回init,繼續執行/etc/rc.d/rc程式。以預設運作級别5為例,(可以檢視/etc/inittab檔案确認預設的運作級别,相關字元段id:5:initdefault:),init将執行配置檔案inittab中的以下内容:

15:5:wait:/etc/rc.d/rc 5

這一行表示以5為參數運作/etc/rc.d/rc,/etc/rc.d/rc是一個shell腳本,它接受5作為參數,去執行/etc/rc.d/rc5.d目錄下的所有的rc啟動腳本,/etc/rc.d/rc5.d目錄中的啟動腳本實際上都是一些連結檔案,而不是真正的rc啟動腳本,真正的rc啟動腳本實際上都在/etc/rc.d/init.d目錄下。而這些rc啟動腳本有着類似的用法,它們一般能接受stat、stop、restart、status等參數。

/etc/rc.d/rc5.d中的rc啟動腳本通常是以K或S開頭的連結檔案,以S開頭的啟動腳本将以start參數來運作。如果發現相應的腳本也存在K打頭的連結,而且已經處于運作狀态了(以/var/lock/subsys下的檔案作為标志),則将首先以stop為參數停止這些已經啟動了的守護程序,然後再重新運作。這樣做是為了保證當init改變運作級别時,所有相關的守護程序都将重新開機。

三、執行/etc/ec.d/rc.local

RHEL 4中的運作模式2、3、5都把/etc/rc.d/rc.local做為初始化腳本中的最後一個,是以使用者可以自己在這個檔案中添加一些需要在其他初始化工作之後、登入之前執行的指令。在維護Linux系統時一般會遇到需要系統管理者對開機或關機指令腳本進行修改的情況。如果所做的修改隻在引導開機的時候起作用,并且改動不大的話,可以考慮簡單地編輯一下/etc/rc.d/rc.local腳本。這個指令腳本程式是在引導過程的最後一步被執行的。

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

好了知道了Linux的啟動過程,那麼我們添加自啟動腳本就友善了,無非是在/etc/ec.d/rc.local裡直接添加,或寫個腳本,把腳本的路徑放到/etc/ec.d/rc.local中,其實這兩種方式原理是一樣的。還有就是寫個腳本,把腳本放在/etc/ec.d/init.d檔案夾下,然後 chkconfig --add  filename。下面具體說下;

先看下/etc 檔案夾下與自啟動相關的檔案和目錄 ,ls -l 可以看到如下:

lrwxrwxrwx  1 root root      11 08-16 08:41 init.d -> rc.d/init.d
lrwxrwxrwx  1 root root      10 08-16 08:43 rc0.d -> rc.d/rc0.d
lrwxrwxrwx  1 root root      10 08-16 08:43 rc1.d -> rc.d/rc1.d
lrwxrwxrwx  1 root root      10 08-16 08:43 rc2.d -> rc.d/rc2.d
lrwxrwxrwx  1 root root      10 08-16 08:43 rc3.d -> rc.d/rc3.d
lrwxrwxrwx  1 root root      10 08-16 08:43 rc4.d -> rc.d/rc4.d
lrwxrwxrwx  1 root root      10 08-16 08:43 rc5.d -> rc.d/rc5.d
lrwxrwxrwx  1 root root      10 08-16 08:43 rc6.d -> rc.d/rc6.d
lrwxrwxrwx  1 root root      13 08-16 08:43 rc.local -> rc.d/rc.local
           

其實/etc下的init.d目錄和rc.load檔案時rc.d目錄下相關檔案的軟連結,我們在修改的時候修改其中一個就可以了。

1)編輯/etc/rc.d/rc.local檔案

雖然分級啟動會運作不同的rcX.d檔案,但是這個檔案在運作分級2、3、5的時候都會作為初始化的最後一個腳本執行。

[[email protected] etc]# cat /etc/rc.local 
#!/bin/sh
#
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don't
# want to do the full Sys V style init stuff.

touch /var/lock/subsys/local
#這裡可以添加你要執行的腳本
           

OK,測試成功。

2)寫個腳本,示例如下

[[email protected] ~]# vi addroute
#! /bin/bash
route add -net  10.10.101.0  netmask 255.255.255.0 gw 10.10.100.1
           

添加運作權限 chmod +x addroute

再在/etc/rc.d/rc.local檔案中添加

/root/addroute

OK,測試成功。

3)使用chkconfig指令把要啟動的腳本添加到服務裡

把addroute的開頭改成

#!/bin/sh
#
# chkconfig: 2345 20 80
# description: Add route
#
route add -net  10.10.101.0  netmask 255.255.255.0 gw 10.10.100.1
           

儲存退出。添加運作權限

這裡的chkconfig: 2345 20 80和description: Add route 一定要有。

chkconfig後面的2345是指運作級别,等于是在rc2.d rc3.d rc4.d rc5.d 中建立指向/etc/init.d 目錄下addroute腳本的軟連結。

20和80 一個是系統啟動時執行的順序和系統關閉時結束指令的順序

注意一定要把腳本放在/etc/init.d目錄下才能使用chkconfig

執行:chkconfig --add addroute

重新開機。

測試成功!

繼續閱讀