参考:
NAS搭建记录(群晖DS218+):锂电池UPS方案/功耗测试 - 知乎 (zhihu.com)
防止 crontab 定时任务重复执行_清泉影月的博客-CSDN博客_crontab 多个任务
一文精通 crontab从入门到出坑 - 知乎 (zhihu.com)
服务器由 UPS 供电,但没有电源管理输入接口。路由器由市电供电。
因此,监视路由器是否保持连接,发现无法 ping 通路由器时,执行关机操作。
1、关机脚本
#!/bin/sh
MonitorIP=192.168.0.1
DelayTime=5m
BasePath=$(dirname $0)
ping -c 2 $MonitorIP > /dev/null
result=$?
if [ $result -eq 0 ]; then
echo "AC Power online."
else
echo "AC Power maybe offline, check again after $DelayTime. "
sleep $DelayTime
ping -c 2 $MonitorIP > /dev/null
result=$?
if [ $result -eq 0 ]; then
echo "AC Power restored."
else
echo "Can't touch the target $MonitorIP still, shutting down..."
echo "[$(date '+%Y-%m-%d %H:%M:%S')] AC Power off." >> $BasePath/ups-monitor.log
# add some job here to stop service
sleep 3s
poweroff
fi
fi
exit 0
2、加入 cron 计划任务
为了防止脚本运行时间超过间隔时间,加入文件锁定操作,避免同时多个运行实例。请参照 flock 命令。
编辑 crontab
crontab -e
输入条目:
* * * * * flock -xn /run/lock/ups_monitor.lock -c "/home/mos/scripts/ups_monitor.sh"
每分钟运行一次脚本 ups_monitor.sh,锁定的文件可以是任意文件,这里使用 /urn/lock/ups_monitor.lock,如果文件不存在,flock 会自动创建它。