美文网首页运维
shell脚本之服务器意外断电检测

shell脚本之服务器意外断电检测

作者: 上帝是自由的 | 来源:发表于2020-08-20 16:49 被阅读0次

    脚本说明

    • 起因
      开发这个脚本的初衷是要解决现实中意外断电或者其他人为原因导致的服务器不正常关机问题。为什么要解决这个问题,有人说加个监控不就知道服务器是否重启过何必单独部署这个脚本,但是现实中,很多客户都没有监控系统,别说监控了连专职运维人员都没有,经常客户打电话给我很着急的说系统又不能用了,我第一反应就是又意外断电了,系统上面运行了几十个服务,意外关机就会导致系统启动不正常,启动不正常的原因我猜测是系统意外断电启动时进行了系统异常检测,影响某个依赖服务启动导致整个业务系统不能用。

    • 解决
      手动重启下服务器即可,将几十个依赖服务正常启动。
      首先要判断服务器是否是非正常关机
      并且要在每次开启动时进行检测

    • 脚本解释
      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+。

    -萧瑟

    相关文章

      网友评论

        本文标题:shell脚本之服务器意外断电检测

        本文链接:https://www.haomeiwen.com/subject/jhqejktx.html