1. 程式人生 > >sysV init服務腳本(入門級)

sysV init服務腳本(入門級)

chkconfig

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

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

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

#chkconfig:runlevel SS KK

技術分享技術分享

因為在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,並不是限制性的。而是透出一種規律,先開啟的服務後關閉,後開啟的服務先關閉。因為先開啟的服務可能被其他服務所依賴,後開啟的服務可能依賴其他服務。

如果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

技術分享技術分享

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

chkconfig --add myservice

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

技術分享技術分享


sysV init服務腳本(入門級)