admin管理员组文章数量:1582013
更新了更加简洁的新方式:https://blog.csdn/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/weixin_45735058/article/details/102491062
https://blog.csdn/lizhigang_bj/article/details/105610790
版权声明:本文标题:【软路由】esxi 通过ping实现停电自动关机 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/xitong/1727888678a1136173.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论