我正在运行 Debian 8 和 Zabbix 3.2。
我制作了一个自定义警报脚本,它在终端中运行时运行良好:
/bin/sh /usr/lib/zabbix/alertscripts/send_sms.sh 4483222740 Hello
这通过 Twilio 发送短信,效果很好。
在我的 zabbix_server.conf 中我有:
AlertScriptsPath=/usr/lib/zabbix/alertscripts
我创建了一个自定义媒体类型https://www.zabbix.com/documentation/3.2/manual/config/notifications/media/script
但脚本未被调用。我有一个电子邮件通用媒体类型,可以正确触发。
我对该脚本的权限是:
ls -alh
total 12K
drwxr-xr-x 2 root root 4.0K Mar 9 09:04 .
drwxr-xr-x 4 root root 4.0K Feb 3 13:36 ..
-rwxr--r-- 1 root root 165 Mar 9 09:12 send_sms.sh
我尝试在 /var/log/ 目录中查找“send_sms”,看看是否发生任何错误。没有。
我的剧本以
exit 0
如何调试?
答案1
a) 您引用的权限仅允许用户(脚本所有者)-rwxr--r-- 1 root root 165 Mar 9 09:12 send_sms.sh
执行脚本。Zabbix 守护程序通常以用户身份运行,因此该用户无权运行脚本。由于脚本已经是全局可读的,因此将权限更改为 755 应该是可以接受的,并将允许 Zabbix 运行脚本root
zabbix
b)如果您的脚本依赖于任何环境变量,请确保在脚本本身中设置这些变量 - Zabbix 不会获取配置文件或您可能期望设置这些变量的任何其他内容
答案2
您可以创建一个 sudoers 文件,允许 zabbix 用户运行脚本,而不是开放权限。Sudoers 语法非常复杂,如果您搞砸了,它会完全破坏 sudo,除非您删除不正确的文件或行,所以要小心。
zabbix ALL=NOPASSWD: /usr/lib/zabbix/alertscripts/send_sms.sh *
zabbix 和 ALL 之间需要有一个制表符,而不是空格,因此请确保您的编辑器不会替换它。这个网站似乎这样做了,所以不要直接复制和粘贴。
例如,删除该行/etc/sudoers.d/zabbix
。以 root 身份执行此操作,这样如果您不小心破坏了 sudo,就不会被锁定。之后您可以使用 测试语法visudo -cf /etc/sudoers.d/zabbix
。
编辑:再说一次,我的用例是使用 apt-get 检查与更新相关的更新,这需要 root 权限。Twilio 可能仍然有效,只是需要读取/执行文件。
答案3
我解决了这个问题,不是关于权限的问题,写在这里也许对其他人有帮助。因为 zabbix 运行你的脚本不在你的 Alertscript 中,所以你只需要添加一个命令:cd $Alertscriptpath(基于你的环境),它就可以工作了