本教程介紹在CentOS 7服務(wù)器上實(shí)現(xiàn)指定服務(wù)開機(jī)自啟。
1.用sh腳本實(shí)現(xiàn)啟動服務(wù)
vim itService-start.sh # 編輯腳本,內(nèi)容如下:
#!/bin/sh
DIR=$(cd "$(dirname "$0")" && pwd) # cd 到腳本所在的目錄,并把路徑賦值給DIR?
classPath=$DIR/itservice-0.1.jar # 把要運(yùn)行的jar包賦值給classPath
mainClass=s.com.wkh.ItService #?把主函數(shù)入口賦值給classPath
shLogPath=$DIR/sh_start.log # 把啟動腳本日志賦值給shLogPath
jps | grep ItService | awk "{print \$1}" | xargs kill -9 >/dev/null 2>&1 # 獲取該服務(wù)的進(jìn)程號并強(qiáng)制結(jié)束進(jìn)程
nohup java -cp "$classPath" "$mainClass" >"$shLogPath" & # 后臺運(yùn)行jar包
jps # 顯示當(dāng)前所有java進(jìn)程pid
至此就可以用itService-start.sh啟動該服務(wù)了。
2.注冊成一個系統(tǒng)服務(wù)
服務(wù)腳本必須存放在/etc/ini.d/目錄下;
vim /etc/init.d/itservice # 編輯腳本,內(nèi)容如下:
#!/bin/sh
### BEGIN INIT INFO
# Provides:? ? ? ? ? itservice
# Default-Start:? ? 2 3 4 5
# Default-Stop:? ? ? 0 1 6
# Description:? ? ? itservice
### END INIT INFO
RETVAL=0
tdir=/root/itService
pidof=`jps | grep ItService | awk '{print \$1}'`
case "$1" in
start)
if [ -z "$pidof" ];then
echo "Starting ItService..."
$tdir/itService-start.sh
else
echo "ItService already running"
fi
RETVAL=$?
;;
stop)
echo "Stopping ItService..."
[ -z "$pidof" ] && echo "ItService not running..." || kill $pidof
RETVAL=$?
;;
restart)
echo "Stopping ItService..."
echo "Starting ItService..."
$tdir/itService-start.sh
RETVAL=$?
;;
status)
[ -z "$pidof" ] && echo "ItService not running..." || echo "ItService running with pid $pidof"
RETVAL=$?
;;
*)
echo "Usage: /etc/init.d/itservice {start|stop|restart|status}"
RETVAL=$?
;;
esac
exit $RETVAL
至此腳本寫完,用chkconfig --add itservice注冊成一個系統(tǒng)服務(wù),此時服務(wù)會被在/etc/rc.d/rcN.d中賦予K/S入口,然后可以用service?itservice?start來啟動了。
3.用chkconfig設(shè)置開機(jī)自啟
chkconfig --level 35 itservice on
--level<等級代號> 指定讀系統(tǒng)服務(wù)要在哪一個執(zhí)行等級中開啟或關(guān)畢。
等級0表示:表示關(guān)機(jī)
等級1表示:單用戶模式
等級2表示:無網(wǎng)絡(luò)連接的多用戶命令行模式
等級3表示:有網(wǎng)絡(luò)連接的多用戶命令行模式
等級4表示:不可用
等級5表示:帶圖形界面的多用戶模式
等級6表示:重新啟動
4.常見問題
1.sh沒有執(zhí)行權(quán)限,解決方案:chmod 700 itService-start.sh
2.chkconfig --add servicename時遇到service xxx does not support chkconfig,解決方案:必須把下面兩行注釋放在/etc/init.d/itservice文件靠前的注釋中:
# Default-Start:? ? 2 3 4 5
# Default-Stop:? ? ? 0 1 6
PS: 不在腳本所在目錄執(zhí)行sh時要注意工作目錄的問題。