有人知道如何使用 NUT 在断电时停止服务吗?
我制作了一个这样的自定义脚本,问题是脚本用户(NUT)没有停止服务的 root 权限。
我想在断电后立即停止 boinc-client,这样我就不会在真正需要之前耗尽电池并启动发电机。
#! /bin/bash
# UPS notify script.
if [$NOTIFYTYPE == "ONBATT"]
then
/etc/init.d/boinc-client stop
fi
/usr/bin/mail -s "UPS '$UPSNAME': $NOTIFYTYPE" [email protected] <<END
$*
END
答案1
看上去不错。
你有两个选择,一个比另一个更好。
第一个也是最好的选择是使用 sudo。允许脚本以非交互式 nopasswd sudo 身份运行(将脚本的路径指定为允许的命令),并sudo
在停止命令前面添加一个。
另一个选项是使用 unix 权限。确保脚本的所有者是 root,并且其组是运行用户可以访问的组(您可能必须创建一个新组)。使其具有 suid 权限,为该组授予执行访问权限,这样您就可以开始了(但请确保该组没有写访问权限,否则您将面临安全漏洞)。
答案2
您可以设置一个 cron 任务,每 10 秒检查一次文件 /tmp/poweroutage 的 root 权限,一旦发现就终止 boinc。我同意处理权限问题可能更好。