LEONE
发布于 2025-06-16 / 35 阅读
0
0

🚨 意外断电?如何实现 Mac 电脑安全关机,保护数据安全!

🧩 背景与作用

本文基于 NUT(Network UPS Tools) 实现,Mac 可通过网络监听 Synology 群晖 NAS 所共享的 UPS 状态,做到断电时自动安全关机。

  • 应用场景:Mac 与群晖共用一台 UPS,UPS 连接在群晖上,Mac 要能感知掉电。

  • 项目优势:避免数据损坏、硬盘损伤;实现异构系统 UPS 联动。

  • 适用环境

    • Mac mini (Apple Silicon)

    • 群晖 DSM 7.x

    • 群晖 UPS 已接入并启用 UPS 服务共享

🛠 环境准备(macOS 端)

📦 安装 Homebrew(macOS 包管理器)

为了安装 NUT 套件,你需要先安装 macOS 的包管理器 —— Homebrew。请按照以下步骤操作:

  1. 打开 终端(Terminal)

  2. 复制并粘贴以下命令执行安装:

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

  1. 安装完成后,执行以下命令验证是否安装成功:

brew --version

若终端成功输出版本号(如:Homebrew 4.3.2),则说明 Homebrew 已正确安装,可继续进行后续操作。

⚙️ NUT安装与配置步骤

1️⃣ 群晖端配置

  1. 登录 DSM,打开 控制面板 > 硬件和电源 > UPS

    • ✅ 勾选“启用 UPS 支持”

    • ✅ 勾选“启用网络 UPS 服务器”

    • 添加 Mac 的 IP 地址(如:192.168.2.176

  2. 打开 SSH,连接群晖:

    ssh youruser@192.168.2.13
    sudo -i
  3. 查看并备份 /etc/ups/upsd.users 文件:

    cp /etc/ups/upsd.users /etc/ups/upsd.users.bak
    cat /etc/ups/upsd.users
  4. 如果没有配置用户,添加如下内容(示例):

    [monuser]
        password = password
        upsmon master

2️⃣ Mac 端配置(Homebrew + NUT)

安装 NUT:

brew install nut

修改配置文件:

sudo nano /opt/homebrew/etc/nut/upsmon.conf

修改内容如下:

MONITOR ups@192.168.2.13 1 monuser password slave
​
SHUTDOWNCMD "/sbin/shutdown -h +0"
​
POLLFREQ 5
POLLFREQALERT 10
DEADTIME 15
​
NOTIFYFLAG ONLINE           SYSLOG
NOTIFYFLAG ONBATT           SYSLOG
NOTIFYFLAG LOWBATT          SYSLOG
NOTIFYFLAG COMMOK           SYSLOG
NOTIFYFLAG COMMBAD          SYSLOG
NOTIFYFLAG SHUTDOWN         SYSLOG
NOTIFYFLAG REPLBATT         SYSLOG
NOTIFYFLAG NOCOMM           SYSLOG
NOTIFYFLAG FSD              SYSLOG

🚀 设置自动启动

创建 LaunchDaemon 启动项:

  1. 创建文件:

sudo nano /Library/LaunchDaemons/nut.upsmon.plist
  1. 填入以下内容:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
 "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>nut.upsmon</string>
​
    <key>ProgramArguments</key>
    <array>
        <string>/opt/homebrew/sbin/upsmon</string>
    </array>
​
    <key>RunAtLoad</key>
    <true/>
​
    <key>KeepAlive</key>
    <true/>
​
    <key>StandardOutPath</key>
    <string>/tmp/upsmon.log</string>
​
    <key>StandardErrorPath</key>
    <string>/tmp/upsmon.err</string>
</dict>
</plist>
  1. 设置权限并启用:

sudo chmod 644 /Library/LaunchDaemons/nut.upsmon.plist
sudo chown root:wheel /Library/LaunchDaemons/nut.upsmon.plist
sudo launchctl bootstrap system /Library/LaunchDaemons/nut.upsmon.plist

✅ 验证配置

查看 UPS 状态:

upsc ups@192.168.2.13

输出示例应包含:

ups.status: OL
battery.charge: 100
input.voltage: xxx
...

查看 upsmon 是否运行:

ps aux | grep upsmon

🧱 避坑指南

问题

原因与解决办法

ERR ACCESS-DENIED

用户名或密码不对,检查 upsmon.conf 与群晖 upsd.users 是否匹配

ups@IP is unavailable 提示频繁

重复运行了多个 upsmon,使用 sudo pkill -f upsmon 清理后再启动

Fatal error: A previous upsmon instance is already running!

删除 /opt/homebrew/var/run/upsmon.pid,确保清理后再执行启动指令

群晖 SSH 操作担心误改配置

建议先执行 cp 做好备份,误操作后可恢复

📌 后续建议

  • 建议将 Mac 和群晖的主机名都设置为静态(LAN),避免 IP 改变导致失联。

  • 若设备较多,可考虑一台群晖 + 多台监听客户端构成 UPS 联动网络。

文档维护时间:2025-06-16 作者:@LeoneWang


评论