脚本说明
-
起因
开发这个脚本的初衷是要解决现实中意外断电或者其他人为原因导致的服务器不正常关机问题。为什么要解决这个问题,有人说加个监控不就知道服务器是否重启过何必单独部署这个脚本,但是现实中,很多客户都没有监控系统,别说监控了连专职运维人员都没有,经常客户打电话给我很着急的说系统又不能用了,我第一反应就是又意外断电了,系统上面运行了几十个服务,意外关机就会导致系统启动不正常,启动不正常的原因我猜测是系统意外断电启动时进行了系统异常检测,影响某个依赖服务启动导致整个业务系统不能用。 -
解决
手动重启下服务器即可,将几十个依赖服务正常启动。
首先要判断服务器是否是非正常关机
并且要在每次开启动时进行检测 -
脚本解释
1.创建脚本工作目录,日志文件。
2.创建chkboot.sh脚本。
3.判断是否异常重启。
4.创建touch.sh脚本,给后面的stopSrv服务调用。
5.创建stopSrv服务,并激活开机启用,该服务在正常关机时会执行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验证过,应该适用centos7+。
-萧瑟
网友评论