脚本逻辑:每分钟ping192.168.110.1,如果断电了的话,则路由器也会自动断电,服务器ping路由器的时候就会ping不通,如果ping不通的话,则表示已经断电,将断电命令加入倒计时,当三次(连续三分钟)ping都ping不通的话,则执行关机流程,其中有一次ping通了,则取消关机命令。
直接贴代码:
vim check_ping_and_shutdown.sh
#!/bin/bash
# 定义相关变量
TARGET_IP="192.168.110.1"
SHUTDOWN_FILE="/tmp/shutdown_time"
CHECK_INTERVAL=60 # 检查间隔,单位:秒(这里设置为1分钟)
# 获取当前时间(秒)
current_time=$(date +%s)
# 检查是否存在关机命令文件
if [ -f "$SHUTDOWN_FILE" ]; then
# 读取文件中的计划关机时间
scheduled_time=$(cat "$SHUTDOWN_FILE")
# 将文件中的时间转换为秒(假设文件内容是以秒为单位的时间戳)
scheduled_time_seconds=$(echo "$scheduled_time" | bc)
# 比较当前时间和计划关机时间
if [ "$current_time" -ge "$scheduled_time_seconds" ]; then
# 如果当前时间大于或等于计划关机时间,则执行关机命令
echo "当前时间已达到或超过计划关机时间,正在执行关机命令..."
rm -f "$SHUTDOWN_FILE"
/usr/sbin/shutdown -h now
else
# 如果当前时间小于计划关机时间,则ping目标IP
ping -c 1 "$TARGET_IP" > /dev/null 2>&1
if [ $? -ne 0 ]; then
# 如果ping不通,则脚本执行完成(不执行任何额外操作)
echo "Ping失败,但未达到计划关机时间,脚本执行完成。"
else
# 如果ping通了,则删除关机命令文件
echo "Ping成功,删除计划关机文件。"
rm -f "$SHUTDOWN_FILE"
fi
fi
else
# 如果不存在关机命令文件,则ping目标IP
ping -c 1 "$TARGET_IP" > /dev/null 2>&1
if [ $? -ne 0 ]; then
# 如果ping不通,则新建关机命令文件,并写入3分钟后的时间
future_time=$(($current_time + 180)) # 3分钟后的时间(秒)
echo "$future_time" > "$SHUTDOWN_FILE"
echo "Ping失败,已设置3分钟后关机。"
else
# 如果ping通了,则不做任何操作
echo "1"
fi
fi
# 注意:此脚本需要每分钟执行一次,您可以使用cron作业来安排它。
# 例如,编辑cron作业可以使用命令 `crontab -e`,然后添加以下行:
# * * * * * /path/to/this/script.sh
crontab -e
* * * * * /home/wwwroot/ups/check_ping_and_shutdown.sh
原创文章,作者:大洋哥,如若转载,请注明出处:https://www.unfit.cn/archives/190.html