首頁 > 軟體

Linux的chkconfig服務註冊(服務註冊指令碼說明)

2020-06-16 16:52:18

Linux上一些服務的重新啟動以及隨系統啟動而啟動,可以像Windows那樣註冊為服務通過chkconfig 進行操作。在註冊chkconfig時需要在Linux的/etc/init.d/目錄下有對應的啟動指令碼。

一、註冊服務指令碼說明

1、/etc/init.d/目錄下的指令碼名稱就是服務註冊時使用的服務名。

2、在服務指令碼中一般包括start/stop/restart/status/condrestart/reload幾種操作

        start:啟動服務

        stop:停止服務

        status:檢視服務狀態

        condrestart::類似restart,但是只有在服務存在時才會執行重新啟動

          restart:重新啟動服務,在服務進程不存在時直接提到服務

          reload:不進行重新啟動,對服務的組態檔重新讀取載入

3、標準服務註冊指令碼模板(使用keepalived的註冊指令碼):

#!/bin/sh
#
# Startup script for the Keepalived daemon
#
# processname: keepalived
# pidfile: /var/run/keepalived.pid
# config: /etc/keepalived/keepalived.conf
# chkconfig: - 21 79 #此處必須有,是chkconfig服務註冊到linux啟動級別的設定
# description: Start and stop Keepalived

# Source function library
. /etc/rc.d/init.d/functions #載入指令碼使用到的函數例如status、killproc

# Source configuration file (we set KEEPALIVED_OPTIONS there)
. /etc/sysconfig/keepalived #服務的組態檔

RETVAL=0 #狀態碼

prog="keepalived" #服務的進程檔名,進程號檔名keepalived.pid

start() {
    echo -n $"Starting $prog: "
    daemon keepalived ${KEEPALIVED_OPTIONS}
    RETVAL=$?
    echo
    [ $RETVAL -eq 0 ] && touch /var/lock/subsys/$prog #鎖定進程,後面查詢進程是否存在通過此檔案
}

stop() {
    echo -n $"Stopping $prog: "
    killproc keepalived #預設到/var/lock/subsys/、/var/run目錄下查詢對應的檔案和pid 然後kill
    RETVAL=$?
    echo
    [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/$prog #刪除進程鎖定檔案
}

reload() {
    echo -n $"Reloading $prog: "
    killproc keepalived -1 #查詢組態檔並重新載入
    RETVAL=$?
    echo
}

# See how we were called.
case "$1" in
    start)
        start
        ;;
    stop)
        stop
        ;;
    reload)
        reload
        ;;
    restart)
        stop
        start
        ;;
    condrestart)
        if [ -f /var/lock/subsys/$prog ]; then
            stop
            start
        fi
        ;;
    status)
        status keepalived
        ;;
    *)
        echo "Usage: $0 {start|stop|reload|restart|condrestart|status}"
        exit 1
esac

exit $RETVAL

4、非標準註冊指令碼(使用haproxy註冊指令碼)

#!/bin/sh
#
# Startup script for the Haproxy daemon
#
# processname: haproxy
# description: Start and stop haproxy
# chkconfig: - 21 79 #同上必寫
. /etc/rc.d/init.d/functions

basedir=/usr/local/sbin #服務啟動指令碼目錄
confdir=/etc/haproxy #組態檔目錄
start() {
 echo "START HAPROXY SERVERS"
 ${basedir}/haproxy -f ${confdir}/haproxy.cfg  #執行啟動命令
}
stop() {
 echo "STOP HAPORXY lISTEN"
 kill -TTOU $(cat /usr/local/logs/haproxy.pid) #停止提供服務
 echo "STOP HAPROXY PROCESS"
 kill -usr1 $(cat /usr/local/logs/haproxy.pid) #殺死進程
}
# See how we were called.
case "$1" in
    start)
        start
 error=$?
        ;;
    stop)
        stop
 error=$?
        ;;
    restart)
        stop
        start
 error=$?
        ;;
    status)
 status -p /usr/local/logs/haproxy.pid #檢查服務狀態,根據進程號檔案判斷
 error=$?
 ;;
    *)
        echo "Usage: $0 {start|stop|restart}"
esac
exit $error

5、註冊指令碼編寫體會:

          chkconfig服務是系統自動到/etc/init.d目錄下根據傳遞的服務名查詢到對應的檔案,然後檔案執行傳遞的操作命令(start、stop)。服務指令碼是根據服務的啟動指令碼、檢視進程來進行啟動服務和檢視服務狀態,以及執行kill命令來停服務。

          標準的服務服務在啟動時會把啟動後的進程號記錄到/var/run的目錄下,在/var/subsys/目錄下鎖定服務。因此可以根據keepalived的指令碼來寫註冊服務。當服務進程號檔案目錄是非標準的,此時按照keepavived的指令碼寫命令會報錯,需要根據服務的具體設定來寫指令碼找到進程號進行停,或執行服務的啟動指令碼執行start。

二、chkconfig命令常用操作:

        chkconfig --add  服務名#註冊服務

        chkconfig --del  服務名#刪除服務

        chkconfig  --list 服務名# 檢視服務啟動的級別

        chkconfig --level 2,3  服務名 on|off開啟或關閉在某個級別的服務

        service 服務名 start|stop|restart #對服務進行操作

本文永久更新連結地址https://www.linuxidc.com/Linux/2018-05/152245.htm


IT145.com E-mail:sddin#qq.com