2021-05-12 14:32:11
Linux的chkconfig服務註冊(服務註冊指令碼說明)
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
相關文章