首页
/ NUT项目在树莓派上配置NOTIFYCMD通知功能的实践指南

NUT项目在树莓派上配置NOTIFYCMD通知功能的实践指南

2025-06-28 08:08:37作者:庞眉杨Will

背景介绍

NUT(Network UPS Tools)是广泛使用的UPS电源管理工具套件,其中的upsmon守护进程可以通过NOTIFYCMD配置自定义通知脚本。在实际部署中,很多用户会遇到通知脚本执行权限和邮件发送的问题。

典型问题现象

在树莓派Bullseye系统上部署NUT时,虽然SSH终端能收到UPS断电通知,但配置的邮件通知脚本未能正常工作。具体表现为:

  1. 通知脚本已正确放置在/etc/nut目录
  2. 脚本权限设置为774(root:nut)
  3. MSMTP邮件客户端单独测试正常

根本原因分析

经过排查发现两个关键问题点:

  1. 用户上下文问题
  • upsmon默认以nut用户身份运行
  • 但脚本和邮件客户端的执行涉及用户权限继承
  • 系统未创建nut用户导致权限链断裂
  1. 邮件服务器限制
  • 部分邮件服务商会拒绝来自root用户的发信请求
  • 需要配置合适的发件人身份

解决方案

方案一:调整运行用户

修改/etc/nut/upsmon.conf中的配置:

RUN_AS_USER <系统有效用户>

替换为系统中实际存在的、有邮件发送权限的用户

方案二:完善权限配置

  1. 创建nut系统用户:
sudo useradd -r -s /bin/false nut
  1. 配置sudo权限:
echo 'nut ALL=(ALL) NOPASSWD: /usr/bin/msmtp' >> /etc/sudoers
  1. 修改通知脚本:
#!/bin/bash
EMAIL='your@email.com'
printf "Subject: NUT ALERT\n\nUPS: $UPSNAME\nAlert: $NOTIFYTYPE" | sudo -u <有效用户> msmtp $EMAIL

最佳实践建议

  1. 脚本调试技巧
  • 可先测试直接以目标用户身份运行脚本
  • 使用sudo -u nut /path/to/script.sh模拟运行环境
  1. 邮件配置验证
echo "Test" | msmtp -v your@email.com
  1. 日志检查
  • 查看/var/log/syslog中的nut相关日志
  • 检查邮件客户端日志(~/.msmtp.log)

总结

NUT的通知功能配置需要注意运行上下文和权限继承问题。通过合理配置运行用户和邮件客户端权限,可以确保UPS状态变化时及时收到通知。对于树莓派等嵌入式设备,建议使用轻量级邮件客户端如msmtp,并注意服务商对发件人的限制策略。

登录后查看全文
热门项目推荐
相关项目推荐