腳本說明
起因
開發(fā)這個腳本的初衷是要解決現(xiàn)實中意外斷電或者其他人為原因?qū)е碌姆?wù)器不正常關(guān)機問題匹厘。為什么要解決這個問題,有人說加個監(jiān)控不就知道服務(wù)器是否重啟過何必單獨部署這個腳本炕柔,但是現(xiàn)實中匕累,很多客戶都沒有監(jiān)控系統(tǒng)衰琐,別說監(jiān)控了連專職運維人員都沒有,經(jīng)承帘妫客戶打電話給我很著急的說系統(tǒng)又不能用了,我第一反應(yīng)就是又意外斷電了,系統(tǒng)上面運行了幾十個服務(wù)虑啤,意外關(guān)機就會導(dǎo)致系統(tǒng)啟動不正常叉寂,啟動不正常的原因我猜測是系統(tǒng)意外斷電啟動時進行了系統(tǒng)異常檢測,影響某個依賴服務(wù)啟動導(dǎo)致整個業(yè)務(wù)系統(tǒng)不能用驳遵。解決
手動重啟下服務(wù)器即可堤结,將幾十個依賴服務(wù)正常啟動。
首先要判斷服務(wù)器是否是非正常關(guān)機
并且要在每次開啟動時進行檢測腳本解釋
1.創(chuàng)建腳本工作目錄鸭丛,日志文件竞穷。
2.創(chuàng)建chkboot.sh腳本。
3.判斷是否異常重啟系吩。
4.創(chuàng)建touch.sh腳本来庭,給后面的stopSrv服務(wù)調(diào)用。
5.創(chuàng)建stopSrv服務(wù)穿挨,并激活開機啟用月弛,該服務(wù)在正常關(guān)機時會執(zhí)行touch.sh腳本肴盏。
6.將chkboot.sh腳本添加至rc.local。
#!/bin/bash
# checkreboot status
mkdir /opt/scripts
touch /root/error.log
cd /opt/scripts
cat << eof > chkboot.sh
#!/bin/bash
file="/tmp/checkreboot"
if [ -e \$file ];then
echo \`date\` "system boot is ok!!!" >> /root/error.log
/bin/rm /tmp/checkreboot
else
echo \`date\` "The system boot abnormally, will restart" >> /root/error.log
/usr/sbin/reboot
fi
eof
cat << eof > touch.sh
#!/bin/bash
touch /tmp/checkreboot
eof
chmod +x touch.sh
cat << eof > /usr/lib/systemd/system/stopSrv.service
[Unit]
Description=close services before reboot and shutdown
DefaultDependencies=no
Before=shutdown.target reboot.target halt.target
# This works because it is installed in the target and will be
# executed before the target state is entered
# Also consider kexec.target
[Service]
Type=oneshot
ExecStart=/opt/scripts/touch.sh #your path and filename
[Install]
WantedBy=halt.target reboot.target shutdown.target
eof
systemctl enable stopSrv
echo "/bin/sh /opt/scripts/chkboot.sh" >>/etc/rc.local
echo "Install is done!!!"
- 適用范圍
此腳本在centos7.3和7.8驗證過帽衙,應(yīng)該適用centos7+菜皂。
-蕭瑟