【Linux shell 脚本】断电关闭系统

参考:

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 会自动创建它。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值