我正在使用 apcupsd 来响应 APC UPS 上的事件。守护进程通过链接 BASH 脚本来影响响应。首先,它调用 apccontrol(附加 4 个参数),后者又调用特定于事件的脚本,例如“onbattery”。用户只能编辑这些第三级脚本。
我编辑了我的“onbattery”脚本来构建用于电子邮件和广播的模块化消息,当我直接调用“onbattery”脚本以及从第二级 apccontrol 调用它时,一切都运行良好。然而,当链从顶级守护进程启动时,所有命令(例如 cat、echo 和重定向/附加)似乎在最终的“onbattery”脚本中被忽略。
我从阅读中了解到,生成的 shell/脚本中的重定向是一个问题,但不是如何解决它。任何人都可以帮忙吗?
onbattery脚本如下
#!/bin/bash
echo -e "From: Admin@somewhere \nSubject: Server on battery $(date +%D_%T) \n\n" > email.txt
cat OnBattWarn.txt >> email.txt
cat email.txt | ssmtp remoteadmin@somewherelse
wall | email.txt
exit99
答案1
感谢您的考虑。良好的睡眠已经揭晓了答案。该脚本作为 root 运行良好,但作为 apcupsd 失败 - 指向权限问题(正如 Jeff 所建议的),但实际上问题是 apcupsd 在 / 中创建 email.txt 文件,而不是在原始 /apcupsd 目录中。如果没有该文件,重定向和附加等都会失败。简单的解决方案是使用绝对路径 - 愚蠢的我!如果我没有在其他地方成功使用该脚本的版本,我可能会更快找到答案,因此我的分析是错误的。
我曾尝试使用 set -x 进行调试,但当然 bash 本身并没有失败,所以没有错误 - 只是没有结果。无论如何,现在一切都已修复,感谢您的宝贵时间。