【软路由】esxi 通过ping实现停电自动关机

更新了更加简洁的新方式:https://blog.csdn.net/ZJXCSDN_/article/details/117195838

需求

为配合UPS,实现停电软路由自动关机

ping检测脚本

定时ping 指定IP,通过ping的结果,判断设备是否在线,以此来辨别是否停电,网上看到的教程都是ping一个IP,这里改为ping 两个IP,并且提供修改次数 PING_SUM、跟ping的间隔时间 SLEEP_SEC,同时将异常情况记录到日志文件 LOG_PATH

只有连续 PING_SUM 次,两个IP都ping不通,才会执行关机

文件名及路径:/vmfs/volumes/datastore1/power/power_ping.sh

#!/bin/sh

#ping 的总次数
PING_SUM=8

#ping 的间隔时间,单位秒
SLEEP_SEC=60

LOG_PATH="/vmfs/volumes/datastore1/power/log.txt"

cnt=0
while :
do
    ping -c 1 -W 1 192.168.2.2 > /dev/null
    ret=$?
    
    ping -c 1 -W 1 192.168.2.234 > /dev/null
    ret2=$?
    
    if [[ $ret -eq 0 || $ret2 -eq 0 ]]
    then
        echo '220V Power OK!'
        cnt=0
    else
        cnt=`expr $cnt + 1`
        echo -n `date '+%Y-%m-%d %H:%M:%S'` >> $LOG_PATH
        printf '-> [%d/%d] 220V Power maybe off,checking again after %d seconds!\r\n' $cnt $PING_SUM $SLEEP_SEC >> $LOG_PATH
        printf '-> [%d/%d] 220V Power maybe off,checking again after %d seconds!\r\n' $cnt $PING_SUM $SLEEP_SEC 
        
        if [ $cnt == $PING_SUM ]
        then
            echo 'Poweroff!!!' >> $LOG_PATH
            echo 'Poweroff!!!'
            
            while :
            do
                poweroff
                sleep 1
            done
        fi
    fi
    
    sleep $SLEEP_SEC
done

日志输出格式

2021-04-16 15:12:02-> Power daemon start
2021-04-16 15:12:24-> [1/8] 220V Power maybe off,checking again after 40 seconds!
2021-04-16 15:13:26-> [2/8] 220V Power maybe off,checking again after 40 seconds!
2021-04-16 15:14:28-> [3/8] 220V Power maybe off,checking again after 40 seconds!

守护脚本

执行后,先判断上边ping脚本是否在运行,如果没有在运行,则启动ping脚本,并记录到日志

文件名及路径:/vmfs/volumes/datastore1/power/power_daemon.sh

#!/bin/sh

LOG_PATH="/vmfs/volumes/datastore1/power/log.txt"

# 用ps获取ups进程数量
NUM=`ps -c | grep power_ping.sh | grep -v grep |wc -l`
echo ${NUM}

# 少于1,重启进程
if [ "${NUM}" -lt "1" ]
then
    /vmfs/volumes/datastore1/power/power_ping.sh > /dev/null &
    echo -n `date '+%Y-%m-%d %H:%M:%S'` >> $LOG_PATH
    echo '-> Power daemon start' >> $LOG_PATH
fi
exit 0

定时启动守护脚本

利用cron设置计划任务
vi /etc/rc.local.d/local.sh 修改文件,在文件末尾的 exit 0 前面添加上我们需要的命令:

/bin/kill $(cat /var/run/crond.pid)
/bin/echo "*/1   *    *   *   *  /vmfs/volumes/datastore1/power/power_daemon.sh" >> /var/spool/cron/crontabs/root
/usr/lib/vmware/busybox/bin/busybox crond

含义:
第一行:cat /var/run/crond.pid,该命令会显示出crond该命令的进程号,然后调用kill命令将crond进程kill掉
第二行:使用echo命令在 /var/spool/cron/crontabs/root 文件中追加我们要设置的计划任务的命令
"*/1 * * * * /vmfs/volumes/datastore1/power/power_daemon.sh" 意思是每1分钟,执行一次 power_daemon.sh 脚本
第三行:重启crond进程

最后执行 /sbin/auto-backup.sh 脚本,local.sh文件才会正真地保存,否则会可能重启后就会被还原。

修改时间

从其他设备拷贝 localtime 文件放到磁盘 /vmfs/volumes/datastore1/

将 localtime 文件拷贝至 /etc/ 下替换原来的文件

cp -f /vmfs/volumes/datastore1/localtime /etc/

为防止重新启动文件被还原,加入自动拷贝

vi /etc/rc.local.d/local.sh #编辑自动启动脚本文件

cp -f /vmfs/volumes/datastore1/localtime /etc/ 添加到 exit 0 前

参考:
https://blog.csdn.net/weixin_45735058/article/details/102491062
https://blog.csdn.net/lizhigang_bj/article/details/105610790

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值