TL;DR;是否有任何方法exec
可以以类似于测试邮件命令的方式测试 smartd 配置的命令?
详细信息: 我的用例是使用监控监控我的 Ubuntu Server 18.04。在我的 smartd.conf 中,我告诉 smartmontools:
/dev/sda -a -m root -M exec /usr/share/smartmontools/smartd-runner -M test
/dev/sdb -a -m root -M exec /usr/share/smartmontools/smartd-runner
在 中,/etc/smartmontools/run.d/
我有一个名为 的脚本notify-monit.sh
,当调用它时,它会在 中创建一个/etc/monit/reports
包含 smartd 报告的文件。然后,在 中,/etc/monit/scripts
我有另一个 bash 脚本,它由 monit 调用作为程序检查,如果文件存在则返回 1,如果不存在则返回 0。然后,monit 检查退出代码,如果 != 0 则发出警报。
这个场景有点复杂,所以我想从头到尾进行测试。我手动运行每个脚本,它们单独运行良好,但我仍然觉得在由 smartd 启动的真实案例场景中测试它们更安全。
据我从 smartd 手册页了解,它-M test
只会尝试发送一封测试电子邮件,我在 syslog 中看到它确实这样做了。而且仅此而已。有没有办法测试整个exec
链?
答案1
经过深入调查后,我可以确认-M test
交换机运行exec
命令。
我以为这有问题,但实际上测试运行正常。整个机制在运行时并没有按预期工作,也没有报告任何错误。使用的smartd
存在问题。经过一番挖掘,我找到了run-parts
smartd-runner
这有人发布了以下链接的帖子这run-parts
包含讨论的错误报告它不支持名称中带有点的脚本。
删除结尾的“.sh”就足以notify-monit.sh
解决我的问题。然后测试monit
成功生成了警报。
为解决相同问题的人提供以下提示:
- 您可以暂时
echo
输入一些内容/usr/share/smartmontools/smartd-runner
,然后检查该内容/var/log/syslog
以确保smartd
调用该脚本 - 您可以运行
run-parts --list --lsbsysinit /etc/smartmontools/run.d
以确保run-parts
“看到”您的脚本