收起左侧

一键脚本飞牛任意UPS实现 断 电自动关机

1
回复
357
查看
[ 复制链接 ]

0

主题

4

回帖

0

牛值

江湖小虾

如果你有一款普通ups还想实现断 电自动关机,原理在飞牛os每分钟ping路由器(设备断 电关机不要连接ups)或者任意ip如果不通连续ping 5次也就是五分钟自动执行关机。

如果觉得这样用也可以就继续往下看使用ai写的一键脚本。

注意:必须修改此处的ip地址为自己的如路由器地址ROUTER_IP="192.168.1.1"

默认为每分钟ping1次,5次不通自动关机,可自定义。

准备好文件继续

#!/bin/bash
# shutdown_watcher.sh - 飞牛OS监控ip关机工具
# 用法: sudo ./shutdown_watcher.sh [install|uninstall|status|start|stop|restart|logs]

# ==================== 配置区域 ====================
ROUTER_IP="192.168.1.1"
CHECK_INTERVAL=60   # 检测间隔(秒)
RETRY_COUNT=5       # 失败重试次数
LOG_FILE="/var/log/shutdown_watcher.log"
SERVICE_NAME="shutdown-watcher"
SCRIPT_PATH="/usr/local/bin/shutdown_watcher.sh"
# =================================================

# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m'

# 打印带颜色信息
info()  { echo -e "${GREEN}[INFO]${NC} $1"; }
warn()  { echo -e "${YELLOW}[WARN]${NC} $1"; }
error() { echo -e "${RED}[ERROR]${NC} $1"; }

# 检查root权限
check_root() {
    [[ $EUID -ne 0 ]] && error "请使用sudo运行此脚本" && exit 1
}

# 主监控逻辑(作为服务运行时)
start_monitor() {
    log() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG_FILE"; }
  
    log "监控启动: IP=$ROUTER_IP, 间隔=${CHECK_INTERVAL}s, 重试=${RETRY_COUNT}次"
    fail=0
  
    while true; do
        if ping -c1 -W3 "$ROUTER_IP" &>/dev/null; then
            [[ $fail -gt 0 ]] && log "网络已恢复"
            fail=0
        else
            ((fail++))
            log "检测失败: $fail/$RETRY_COUNT"
  
            if [[ $fail -ge $RETRY_COUNT ]]; then
                log "故障确认!1分钟后关机"
                shutdown -h +1 "网络故障,1分钟后关机"
                exit 0
            fi
        fi
        sleep $CHECK_INTERVAL
    done
}

# 安装服务
install_service() {
    check_root
  
    # 1. 复制脚本到系统目录
    info "安装脚本到 $SCRIPT_PATH"
    cp "$0" "$SCRIPT_PATH"
    chmod +x "$SCRIPT_PATH"
  
    # 2. 创建systemd服务
    info "创建systemd服务"
    cat > "/etc/systemd/system/${SERVICE_NAME}.service" << EOF
[Unit]
Description=Network Shutdown Watcher
After=network.target

[Service]
Type=simple
ExecStart=$SCRIPT_PATH run
Restart=always
RestartSec=10
User=root

[Install]
WantedBy=multi-user.target
EOF
  
    # 3. 配置日志轮转
    info "配置日志轮转"
    cat > "/etc/logrotate.d/${SERVICE_NAME}" << EOF
$LOG_FILE {
    daily
    rotate 7
    compress
    missingok
    notifempty
    create 644 root root
}
EOF
  
    # 4. 启动并启用服务
    info "启动服务并设置开机自启"
    systemctl daemon-reload
    systemctl enable --now "$SERVICE_NAME"
  
    info "安装完成!"
    status_service
}

# 卸载服务
uninstall_service() {
    check_root
  
    # 1. 停止并禁用服务
    info "停止并禁用服务"
    systemctl stop "$SERVICE_NAME" 2>/dev/null
    systemctl disable "$SERVICE_NAME" 2>/dev/null
  
    # 2. 删除文件
    info "删除相关文件"
    rm -f "/etc/systemd/system/${SERVICE_NAME}.service"
    rm -f "/etc/logrotate.d/${SERVICE_NAME}"
    rm -f "$SCRIPT_PATH"
    rm -f "$LOG_FILE"
  
    # 3. 重载systemd
    systemctl daemon-reload
  
    info "卸载完成!"
}

# 查看状态
status_service() {
    # 检查服务状态
    if systemctl is-active "$SERVICE_NAME" &>/dev/null; then
        info "服务运行中 ✓"
        systemctl status "$SERVICE_NAME" --no-pager -l
    else
        warn "服务未运行"
        systemctl status "$SERVICE_NAME" --no-pager -l 2>/dev/null || error "服务不存在"
    fi
  
    # 显示日志末尾
    echo -e "\n${BLUE}最近日志:${NC}"
    [[ -f "$LOG_FILE" ]] && tail -n 5 "$LOG_FILE" || warn "日志文件不存在"
}

# 启动服务
start_service() {
    check_root
    systemctl start "$SERVICE_NAME" && info "服务已启动"
}

# 停止服务
stop_service() {
    check_root
    systemctl stop "$SERVICE_NAME" && info "服务已停止"
}

# 重启服务
restart_service() {
    check_root
    systemctl restart "$SERVICE_NAME" && info "服务已重启"
}

# 查看日志
view_logs() {
    if [[ -f "$LOG_FILE" ]]; then
        info "实时日志(按Ctrl+C退出):"
        tail -f "$LOG_FILE"
    else
        error "日志文件不存在"
    fi
}

# 显示帮助
show_help() {
    cat << EOF
Usage: sudo $0 [COMMAND]

Commands:
    install     安装为systemd服务(开机自启)
    uninstall   完全卸载服务
    status      查看服务状态和日志
    start       启动服务
    stop        停止服务
    restart     重启服务
    logs        实时查看日志
    run         直接运行监控(不调systemd)
    help        显示此帮助信息

Configuration:
    ROUTER_IP   = $ROUTER_IP
    CHECK_INTERVAL = ${CHECK_INTERVAL}s
    RETRY_COUNT    = $RETRY_COUNT
    LOG_FILE    = $LOG_FILE

Examples:
    sudo $0 install          # 安装并启用
    sudo $0 status           # 查看状态
    sudo $0 logs             # 查看日志
    sudo $0 uninstall        # 完全卸载
EOF
}

# 主程序入口
case "${1:-help}" in
    install)
        install_service
        ;;
    uninstall)
        uninstall_service
        ;;
    status)
        status_service
        ;;
    start)
        start_service
        ;;
    stop)
        stop_service
        ;;
    restart)
        restart_service
        ;;
    logs)
        view_logs
        ;;
    run)
        # 直接运行监控逻辑(不通过systemd)
        info "直接启动监控(退出请按Ctrl+C)"
        start_monitor
        ;;
    help|--help|-h)
        show_help
        ;;
    *)
        error "未知命令: $1"
        show_help
        exit 1
        ;;
esac

前期准备
修改脚本,复制到飞牛文件夹并获取文件位置

01.png

root方式运行

  1. 安装并启用

进入脚本文件夹

cd /vol1/1000/app/
ls看看有没有显示文件shutdown_watcher.sh

02.png

给予执行权限

chmod +x shutdown_watcher.sh

安装为系统服务(开机自启)

sudo ./shutdown_watcher.sh install

03.png

  1. 日常管理命令

查看状态

sudo ./shutdown_watcher.sh status

查看实时日志

sudo ./shutdown_watcher.sh logs

停止监控(临时)

sudo ./shutdown_watcher.sh stop

重新启动

sudo ./shutdown_watcher.sh restart

完全卸载

sudo ./shutdown_watcher.sh uninstall

  1. 配置文件修改(编辑脚本开头的配置区域:)
    nano shutdown_watcher.sh

修改以下参数

ROUTER_IP="192.168.50.1" # 路由器IP
CHECK_INTERVAL=60 # 检测间隔(秒)
RETRY_COUNT=5 # 失败次数
修改后需要重新安装:
sudo ./shutdown_watcher.sh uninstall
sudo ./shutdown_watcher.sh install

  1. 快速检查工具
    创建一个管理别名(可选):
    cat >> ~/.bashrc << 'EOF'
    alias watcher-status='sudo /usr/local/bin/shutdown_watcher.sh status'
    alias watcher-logs='sudo /usr/local/bin/shutdown_watcher.sh logs'
    alias watcher-restart='sudo /usr/local/bin/shutdown_watcher.sh restart'
    EOF

source ~/.bashrc

示例1:查看监控状态

watcher-status

示例2:查看实时日志(按Ctrl+C退出)

watcher-logs

示例3:修改配置后重启服务

watcher-restart

示例4:组合使用 - 重启后立即查看日志

watcher-restart && sleep 2 && watcher-logs

收藏
送赞 1
分享

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

8

主题

128

回帖

0

牛值

fnOS系统内测组

fnOS1.0上线纪念勋章飞牛百度网盘玩家

有啥便宜的ups吗,能坚持完成关机就行的

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则