1. 程式人生 > >linux新增開機啟動項、登陸啟動項、定時啟動項、關機執行項等的方法

linux新增開機啟動項、登陸啟動項、定時啟動項、關機執行項等的方法

使用chkconfig命令可以檢視在不同啟動級別下課自動啟動的服務(或是程式),命令格式如下:
chkconfig --list
可能輸出如下:

network         0:off   1:off   2:on    3:on    4:on    5:on    6:off
ntpd            0:off   1:off   2:on    3:on    4:on    5:on    6:off
ntpdate         0:off   1:off   2:off   3:off   4:off   5:off   6:off

 (0-6 為啟動級別 ; 關閉/開啟為相應級別下該服務的自動啟動選項)

如果希望對自動啟動選項做出改變,命令格式為:
chkconfig --level x name on/off
例如 chkconfig --level 2345 ntpd off
以上的命令可以查詢系統可提供的服務,如果希望開機時、某使用者登入時、定時、某使用者退出時、某一時刻啟動某一程式,可採用以下方法:

1.開機啟動時自動執行程式

Linux載入後, 它將初始化硬體和裝置驅動, 然後執行第一個程序init。init根據配置檔案繼續引導過程,啟動其它程序。通常情況下,修改放置在 /etc/rc或 /etc/rc.d 或 /etc/rc?.d 目錄下的指令碼檔案,可以使init自動啟動其它程式。

例如:編輯 /etc/rc.d/rc.local 檔案,在檔案最末加上一行"xinit"或"startx",可以在開機啟動後直接進入X-Window;

又比如:你編寫了一個可執行指令碼test,放在/root/doc/test,可以在/etc/rc.d/rc.local 檔案末尾新增一行/bin/bash /root/doc/test儲存退出即可。

還比如:需要指定在某些啟動級別(這裡以在3、4、5三種啟動級別下執行為例)下執行某個指令碼testlevel,需要按照規範修改這個指令碼,然後將其存放到/etc/rc.d/init.d下,然後可以有兩種方式來新增自啟動,其一是ln -s /etc/rc.d/init.d/testlevel/etc/rc.d/rc3.d/testlevel 、ln -s /etc/rc.d/init.d/

testlevel /etc/rc.d/rc4.d/testlevel 、ln -s /etc/rc.d/init.d/testlevel /etc/rc.d/rc5.d/testlevel ;其二是執行以下兩條命令chkconfig --add testlevel; chkconfig --level 345 testlevel on

2.登入時自動執行程式
使用者登入時,bash首先自動執行系統管理員建立的全域性登入script :/etc/profile。然後bash在使用者起始目錄下按順序查詢三個特殊檔案中的一個:/.bash_profile、/.bash_login、 /.profile,但只執行最先找到的一個。
因此,只需根據實際需要在上述檔案中加入命令就可以實現使用者登入時自動執行某些程式(類似於DOS下的Autoexec.bat)。

3.退出登入時自動執行程式

退出登入時,bash自動執行個人的退出登入指令碼/.bash_logout。例如,在/.bash_logout中加入命令"tar -cvzf c.source.tgz *.c",則在每次退出登入時自動執行 "tar" 命令備份 *.c 檔案。

4.定期自動執行程式

Linux有一個稱為crond的守護程式,主要功能是週期性地檢查 /var/spool/cron目錄下的一組命令檔案的內容,並在設定的時間執行這些檔案中的命令。使用者可以通過crontab 命令來建立、修改、刪除這些命令檔案。
例如,crontab -e命令建立檔案crondFile,內容為"0 9 23 6 * HappyBirthday",每當6月23日上午9:00系統自動執行"HappyBirthday"的程式("*"表示不管當天是星期幾)。

通過 crontab -l命令可檢視已新增的定時執行程式。

5.定時自動執行程式一次

定時執行命令at 與crond 類似(但它只執行一次):命令在給定的時間執行,但不自動重複。at命令的一般格式為:at [ -f file ] time ,在指定的時間執行file檔案中所給出的所有命令。

示例:任務在啟動時執行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