使用Shell实现UPS(断网自动关机)

本文将介绍如何使用Shell脚本实现UPS(不间断电源)功能,以便在网络断开时自动关机。以下是完整的脚本及其使用说明。

创建Shell脚本文件

脚本代码

#!/bin/bash

# 定义目标 IP 地址和日志文件
destination_ip=114.114.114.114
log_file="/var/log/network_check.log"
shutdown_flag="/tmp/network_shutdown.flag"

# 检查网络连接
if ! ping -c1 $destination_ip &>/dev/null; then 
    echo "$(date): $destination_ip is offline." >> $log_file

    # 检查是否已经执行过关机
    if [ ! -f "$shutdown_flag" ]; then
        echo "$(date): Shutting down due to network failure." >> $log_file
        sudo shutdown -h now >> $log_file 2>&1
        touch "$shutdown_flag" # 创建标志文件
    fi
else
    # 如果网络恢复,删除标志文件
    if [ -f "$shutdown_flag" ]; then
        rm -f "$shutdown_flag"
        echo "$(date): Network is up. Shutdown flag cleared." >> $log_file
    fi
fi

脚本功能

该脚本的功能是每分钟检查一次指定的IP地址。如果无法连接到该地址,脚本会记录日志并执行关机命令。同时,它会创建一个标志文件,以避免在网络断开的情况下重复关机。如果网络恢复,标志文件将被删除。

设置定时任务

为了使脚本定期执行,可以将其添加到crontab中,以下是设置步骤:

  1. 打开cron

    运行以下命令来编辑当前用户的cron表:

   crontab -e
  1. crontab中,添加如下条目,以表示每三分钟执行一次脚本:
*/3 * * * * /path/to/check_network.sh

确保将 /path/to/check_network.sh 替换为你的实际脚本路径。

这个条目的含义是:

  • */3:表示每三分钟执行一次。
  • * * * *:代表小时、日期、月份和星期的通配符,表示在任何时间都可以运行该作业。

保存并退出 编辑完成后,保存并退出编辑器。cron服务会自动加载并运行你设置的任务。

验证任务是否添加成功 使用以下命令查看crontab中是否已正确添加任务:

crontab -l

这将列出当前用户的cron作业。如果你看到刚刚添加的那一行,说明任务已成功添加。

结论

通过以上步骤,你可以成功实现网络断开时的自动关机功能。此脚本能够帮助用户在没有电源的情况下安全地关闭系统,从而保护重要数据和设备。