通過修改Linux服務自動啟動指定應用程序
Linux中修改系統服務的命令是chkconfig (check config),命令的詳細解釋如下:
chkconfig
功能說明:檢查,設置系統的各種服務。
語 法:chkconfig [--add][--del][--list][系統服務] 或 chkconfig [--level <等級代號>][系統服務][on/off/reset]
補充說明:這是Red Hat公司遵循GPL規則所開發的程序,它可查詢操作系統在每一個執行等級中會執行哪些系統服務,其中包括各類常駐服務。
參 數:
--add 增加所指定的系統服務,讓chkconfig指令得以管理它,並同時在系統啟動的敘述文件內增加相關數據。
--del 刪除所指定的系統服務,不再由chkconfig指令管理,並同時在系統啟動的敘述文件內刪除相關數據。
--level<等級代號> 指定讀系統服務要在哪一個執行等級中開啟或關畢
首先來執行 chkconfig --list命令來查看所有已添加的系統服務(下面的結果只是一部分)
[root@fd init.d]# chkconfig --list
diskdump 0:off 1:off 2:off 3:off 4:off 5:off 6:off
xfs 0:off 1:off 2:on 3:on 4:on 5:on 6:off
rhnsd 0:off 1:off 2:off 3:on 4:on 5:on 6:off
cups-config-daemon 0:off 1:off 2:off 3:on 4:on 5:on 6:off
netfs 0:off 1:off 2:off 3:on 4:on 5:on 6:off
nfs 0:off 1:off 2:off 3:off 4:off 5:off 6:off
microcode_ctl 0:off 1:off 2:on 3:on 4:on 5:on 6:off
netplugd 0:off 1:off 2:off 3:off 4:off 5:off 6:off
netdump 0:off 1:off 2:off 3:off 4:off 5:off 6:off
cpuspeed 0:off 1:on 2:on 3:on 4:on 5:on 6:off
syslog 0:off 1:off 2:on 3:on 4:on 5:on 6:off
smb 0:off 1:off 2:off 3:off 4:off 5:off 6:off
ntpd 0:off 1:off 2:off 3:off 4:off 5:off 6:off
rawdevices 0:off 1:off 2:off 3:on 4:on 5:on 6:off
psacct 0:off 1:off 2:off 3:off 4:off 5:off 6:off
vncserver 0:off 1:off 2:off 3:off 4:off 5:off 6:off
saslauthd 0:off 1:off 2:off 3:off 4:off 5:off 6:off
dc_server 0:off 1:off 2:off 3:off 4:off 5:off 6:off
mdmonitor 0:off 1:off 2:on 3:on 4:on 5:on 6:off
httpd 0:off 1:off 2:off 3:off 4:off 5:off 6:off
ibmasm 0:off 1:off 2:off 3:off 4:off 5:off 6:off
dc_client 0:off 1:off 2:off 3:off 4:off 5:off 6:off
其中第一列表示服務名,後面的0-6表示在這六種啟動方式中該服務是啟動(on)還是關閉(off)
比如默認情況下,自動檢測新硬件的服務是啟動的(服務名是kudzu),每次啟動需要檢測一段時間,我們可以關閉服務,以後有了硬件改動在調用它。
chkconfig kudzu off
chkconfig --list kudzu
kudzu 0:off 1:off 2:off 3:off 4:off 5:off 6:off
可以看到檢測新硬件的服務都被關閉了,再次啟動時就不會檢測新硬件了。如果有了硬件改動你可以選擇將此服務打開(chkconfig kudzu on),其實有更簡單的方法,輸入
service kudzu start
手動啟動檢測新硬件服務就可以了。這些服務都存放在/etc/init.d目錄下,他們都是可執行的shell文件,比如剛才用的檢測新硬件服務
[root@fd /]# ls -l /etc/init.d/kudzu
-rwxr-xr-x 1 root root 2095 Aug 23 2005 /etc/init.d/kudzu
其實我們編寫的shell文件也可以放在這裡,然後添加成系統服務,但是我們必須遵守一個簡單的預定。我們先來看看kudzu的具體內容吧
根據這個模式編寫一個簡單的啟動tomcat的服務腳本,vi /etc/init.d/tomcat,內容如下
[root@fd /]# cat /etc/init.d/kudzu
#!/bin/bash
#
# kudzu This scripts runs the kudzu hardware probe.
#
# chkconfig: 345 05 95
# description: This runs the hardware probe, and optionally configures \
# changed hardware.
# This is an interactive program, we need the current locale
具體內容省略
# chkconfig: 2345 20 80
# description: simple example to start tomcat
export JAVA_HOME=/usr/java/jdk1.5.0_16
export CLASS_PATH=/usr/java/jdk1.5.0_16/lib
export PATH=$JAVA_HOME/bin:$PATH
/usr/Tomcat/bin/startup.sh
將tomcat添加到服務中
chkconfig --add tomcat
狀態設為啟動
chkconfig tomcat on
在tomcat文件的頭幾行的注釋語句中,必須包含chkconfig和description兩部分內容,否則在執行“chkconfig --add tomcat”時,會出現“tomcat服務不支持chkconfig”的錯誤提示。chkconfig這行表示缺省啟動的運行級別以及啟動和停止的優先級,如該服務缺省不再任何運行級啟動,則以 - 代替運行級別。在tomcat中表示腳本在運行級2、3、4、5啟動,啟動優先權為20(優先權數越大服務啟動的越晚),停止優先權為80。如果服務已經設置好了,那麼通過編輯tomcat文件來修改啟動優先權就不管用了,先刪除服務再添加進來就可以了。
我模仿檢測新硬件服務的內容編寫一個較為復雜的tomcat服務,在系統啟動時啟動tomcat,在系統關閉時關閉tomcat。內容如下
# chkconfig: 2345 30 70
# description: Starts and Stops Tomcat.
export JAVA_HOME=/usr/java/jdk1.5.0_16
export CLASS_PATH=/usr/java/jdk1.5.0_16/lib
export PATH=$JAVA_HOME/bin:$PATH
case "$1" in
start)
/usr/Tomcat/bin/startup.sh
touch /var/lock/subsys/tomcat
;;
status)
if [ -f /var/lock/subsys/tomcat ]; then
echo $"tomcat is running"
exit 0
fi
echo $"tomcat has stopped"
exit 3
;;
stop)
/usr/Tomcat/bin/shutdown.sh
rm -f /var/lock/subsys/tomcat
;;
restart)
/usr/Tomcat/bin/shutdown.sh
/usr/Tomcat/bin/startup.sh
;;
*)
echo "Usage: tomcat {start|stop|restart|status}"
exit 1
esac
exit 0