sysV init服務腳本(入門級)

在sysV風格的init系統中,以Centos 6.x爲例,系統服務腳本一般在/etc/rc.d/init.d目錄下,每個支持sysV init的腳本,一般都可以接受如下參數:

    start|stop|restart|status   //這就是我們在centos下常用的控制服務啓動與停止的參數。

並且,在sysV init腳本中都會在註釋中有這麼一行

#chkconfig:runlevel SS KK

spacer.gifwKioL1lDlMXCuSMdAABHU7NtISA490.png

因爲在sysV init系統中,使用chkconfig進行服務的開機自啓動管理以及各運行級別切換時要運行服務的管理。而chkconfig:runlevel SS KK就是chkconfig程序管理該腳本啓動或者停止的依據,雖然它是註釋的,但是chkconfig會掃描並讀取它。


參照上一篇帖子,在系統啓動和服務等級發生變化時,是由/etc/rc.d/rc針對不同等級下rc#.d目錄中的腳本進行啓動和停止。所以,我們雖然可以手動將腳本按照命名規則放到指定的rc#.d目錄下,然後由rc在切換時執行,但是這樣總歸是操作太過複雜,linux的哲學思想就是,能不動手就不動手。。。

那麼chkconfig就可以替代人工方式來進行自動的爲服務腳本在指定的rc#.d下創建軟鏈接,然後由rc控制以達到自動運行和停止的目的。


回過頭來說各個字段的意義:

當chkconfig命令來爲此腳本在rc#.d目錄創建鏈接時,runlevels區域的運行等級表示默認創建爲S*開頭的鏈接,此外未指定的運行級別都默認創建爲K*開頭的鏈接。S後面的優先級爲SS所表示的數字,K後面的關閉優先級爲KK所表示的數字;

    一般SS+KK=99,並不是限制性的。而是透出一種規律,先開啓的服務後關閉,後開啓的服務先關閉。因爲先開啓的服務可能被其他服務所依賴,後開啓的服務可能依賴其他服務。(KK值最好爲00,因爲在0和6運行等級中,KK01就是關閉或者重啓動作了)

    如果runleves區域爲-,說明沒有默認爲S開頭的鏈接,所有都是K的。

chkconfig的用法:
--list:列出所有目前chkconfig所能管控的服務。
--list 服務名:只顯示指定服務的啓動規則。
--add 服務名:將制定服務加入管控,也就是給服務在rc#.d下創建軟鏈接。
--del 服務名:移除對指定服務的管控,也就是將服務在rc#.d下的軟鏈接刪除。
--level 運行級別 服務名 [on|off]:精細控制,指定服務在指定級別下是否自啓動。如果不加--level 運行級別,則默認操作2345級別。


瞭解了這些,就可以嘗試自己編寫一個腳本,放到/etc/rc.d/init.d目錄下,然後將其加入chkconfig控制,在指定級別下進行啓動或者停止。

例如,寫一個腳本名字叫做myservice

#!/bin/bash
#chkconfig:2345 77 22
case $1 in
start)
echo "Starting...";;
stop)
echo "Stopping...";;
restart)
echo "Restarting...";;
status)
echo "I don't know";;
*)
echo "please use start|stop|restart|status";;
esac

spacer.gifwKiom1lDlbGyViwcAAAIxLHX6QQ512.png

使用chkconfig 將其加入控制,所謂加入控制就是按照腳本中chkconfig指定的信息在rc#.d下創建軟鏈接。

chkconfig --add myservice

查看一下rc#.d目錄下,可以看到已經存在了創建好的軟鏈接,這樣級別切換時就可以正常啓動或者停止了。

spacer.gifwKioL1lDlb-AjMwPAAAa4_vwZ3Q912.png


爲什麼將開機啓動項寫入/etc/rc.local中,就可以在開機的時候自動執行呢?原因還是藏在/etc/rc.d/rc#.d中,

spacer.gifwKiom1lEjLrwg7UmAAAnGftX9Kk733.png

因爲2345運行等級的最後一個啓動腳本,就是rc.local的軟鏈接。



這一類,可以控制自己在不同運行等級下停止或啓動的被稱之爲獨立運行服務。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章