轉載自:http://blog.chinaunix.net/uid-346158-id-2131254.html
chkconfig --level 345 nfs off
--add name 這個選項增加一項新的服務,chkconfig 確保每個運行級有一項 啓動(S) 或者 殺死(K) 入口。如有缺少,則會從缺省的init 腳本自動建立。--del name 用來刪除服務,並把相關符號連接從 /etc/rc[0-6].d 刪除。
每個被chkconfig 管理的服務需要在對應的init.d 下的腳本加上兩行或者更多行的註釋。
第一行告訴 chkconfig 缺省啓動的運行級以及啓動和停止的優先級。如果某服務缺省不在任何運行級啓動,那麼使用 - 代替運行級。
第二行對服務進行描述,可以用跨行註釋。
例如,random.init 包含三行:
# chkconfig: 2345 20 80
# description: Saves and restores system entropy pool for
# higher quality random number generation.
表明 random 腳本應該在運行級 2,3,4,5 啓動,啓動優先權爲20,停止優先權爲80。
在
實例介紹: 安裝Apache-ActiveMQ
#!/bin/bash
#
# chkconfig: 35 66 34
# description: Apache ActiveMQ
#
. /etc/rc.d/init.d/functions
ACTIVEMQ_USER=activemq
WORK_DIR=apache-activemq-5.4.2
case "$1" in
start)
su - ${ACTIVEMQ_USER} -c "cd ${WORK_DIR}; bin/activemq start"
;;
stop)
su - ${ACTIVEMQ_USER} -c "cd ${WORK_DIR}; bin/activemq stop"
;;
restart|reload)
su - ${ACTIVEMQ_USER} -c "cd ${WORK_DIR}; bin/activemq restart"
;;
status)
su - ${ACTIVEMQ_USER} -c "cd ${WORK_DIR}; bin/activemq status"
;;
*)
echo $"Usage: $0 {start|stop|restart|reload}"
exit 2
esac
exit $RETVAL
將此腳本cp到/etc/init.d/裏面後,cp activemq /etc/init.d/
運行:
chkconfig --add <script_name>
chkconfig --add activemq
#這裏的script_name要與/etc/init.d/下的相同。添加後,此命令會根據你在腳本中定義的三項數字來設定:
1)35 :runlevel,
2)66 :啓動順序
3)34 :shutdown順序
chkconfig --add 其實就是執行了下面的語句:
ln -s /etc/rc.d/init.d/activemq /etc/rc.d/rc3.d/S66activemq
ln -s /etc/rc.d/init.d/activemq /etc/rc.d/rc0.d/K34activemq
# 大寫的S,代表start,其後緊跟啓動順序數字,然後是service name. 大寫的K,代表kill,K或S後面的數字表示執行順序,數字小的先執行。
# ls /etc/rc.d/rc0.d/ -l|grep act
lrwxrwxrwx 1 root root 18 Jun 28 15:17 K34activemq -> ../init.d/activemq
chkconfig --add activemq 我怎麼沒看到添加K34activemq的鏈接呢? 是要執行
chkconfig --level 35 activemq off 後纔有:
# ll /etc/rc.d/rc3.d/|grep acti
lrwxrwxrwx 1 root root 18 Jun 28 15:59 K34activemq -> ../init.d/activemq
並且同時將刪除啓動鏈接.
如果你要刪除/etc/init.d/下面的腳本,chkconfig --del 即可。
但是你不想刪除該腳本,僅僅是讓它不要開機啓動,出了上面的chkconfig off命令外,也可以直接將
/etc/rc.d/rc[2-5].d/下面對應的S開頭的鏈接改名爲小寫s開頭即可.
系統在進入一個運行級別時,首先將該運行級別對應的目錄中以K開頭的腳本按設定順序執行,然後再將以S開頭的腳本按順序執行。
===============================================
關機執行任務與開機有點兒不同,很多人以爲運行級別目錄裏以K開頭的會在關機時執行,其實不然,(2)裏面已經說的很清楚了,正確的設置關機執行任務的步驟如下:
- 將要執行的任務攜程腳本,加上可執行權限,放在/etc/init.d目錄中如/etc/init.d/stopftp.sh
- cd到關閉系統所對應的運行級別目錄/etc/rc0.d目錄中,看一下S後面的數字,選取一個閒置的合適的數字
- 建立從/etc/init.d/stopftp.sh到/etc/rc0.d的軟連接,代碼如下:
sudo ln -s /etc/init.d/stopftp.sh /etc/rc0.d/S24stopftp
(5) 啓動腳本的寫法
用編輯器隨便打開一個/etc/init.d目錄裏的啓動腳本,會發現主代碼段都是下面這種結構:
...
case "$1" in
start)
do start-thing;
;;
stop)
do stop-thing;
;;
restart)
do restart-thing;
;;
...
esac
爲什麼要這樣寫呢?你如果按這種結構寫個啓動腳本測試一下就會發現,若該腳本的軟連接以S開頭,則系統啓動的時候執行start-thing代碼段,若該腳本的軟連接以K開頭的話,則系統啓動時執行stop-thing代碼段(有一點兒例外的是運行級別0,因爲0級別是關閉系統,所以/etc/rc0.d/下的以S開頭的軟連接也執行stop-thing段)。是不是很智能化,所以如果可以的話啓動腳本最好寫標準一些。如果你非寫成普通的腳本,就幾個命令,沒有上面那個結構,建立以K或S開頭的軟連接會怎麼執行呢?答案是全部執行。
http://cqulpj.blogbus.com/logs/68406641.html
============================================
linux不能自動關閉rc0.d目錄下K開頭程序的解決
以前找了很久,都沒找到不能自動關閉k開頭程序的解決辦法,今天無意間看到一篇文章。試驗了下,果然靈。
步驟如下:
先寫一個腳本放在/etc/rc.d/init.d下,chmod -f 777 , 再
ln -s /etc/rc.d/init.d/script_name /etc/rc.d/rc0.d/K01script_name
ln -s /etc/rc.d/init.d/script_name /etc/rc.d/rc6.d/K01script_name,同時也要
ln -s 到 /etc/rc.d/rc3.d/S99script_name 與/etc/rc.d/rc5.d/S99script_name。
K開頭的代表系統關閉的時候執行,S開頭的代表開機的時候執行。注意服務器腳本編寫的規範,因爲有K開通的軟鏈接並不一定會在關機的時候自動去執行,這是爲什麼呢?剛開始一直沒搞明白,後來從網上看到,執行K腳本的時候會查詢/var/lock/subsys/下是否有與K開頭腳本同名的空文件名,如果沒有就不去執行,所以要按照服務器腳本編寫的規範,啓動的時候要在/var/lock/subsys/先touch一個與K01後面同名的空文件.同時也要調用/etc/rc.d/init.d/functions能夠接受start與stop命令信號,具體可以參考/etc/rc.d/rc文件
用/etc/rc.d/init.d/functions能夠接受start與stop命令信號的意思是指
你在/etc/init.d/中的那個程序可以接受start和stop參數