chkconfig 服務的添加、順序

轉載自: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)裏面已經說的很清楚了,正確的設置關機執行任務的步驟如下:

  1. 將要執行的任務攜程腳本,加上可執行權限,放在/etc/init.d目錄中如/etc/init.d/stopftp.sh
  2. cd到關閉系統所對應的運行級別目錄/etc/rc0.d目錄中,看一下S後面的數字,選取一個閒置的合適的數字
  3. 建立從/etc/init.d/stopftp.sh到/etc/rc0.d的軟連接,代碼如下:

  4. sudo ln -s /etc/init.d/stopftp.sh /etc/rc0.d/S24stopftp
這樣就可以了,如果想在執行重啓的時候也執行這個腳本,就用同樣的方式建立一個到/etc/rc6.d/的軟連接。

(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/S99
script_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參數
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章