
我在网络服务器上运行 Nagios。特别是对于这项 Nagios 服务检查,如果失败,它将运行一个脚本。该脚本通过 Nagios 事件处理程序触发。
Nagios 事件处理程序命令:
define command{
command_name testDisableServer
command_line /usr/local/nagios/etc/objects/event_handlers/testDisableServer.sh
}
我正在从 Nagios 事件处理程序执行一个名为 testDisableServer.sh 的脚本,如下所示:
#!/bin/bash
wall "Script execution started";
/usr/bin/sudo /root/scripts/disableServer.sh force
该脚本“testDisableServer.sh”具有以下权限:
-rwxr-xr-x 1 nagios nagios 2.0K Oct 12 14:57 testDisableServer.sh
当服务出现故障时,我会在 SSH 连接中看到一个墙上帖子,上面写着“脚本执行已开始”,但它不会触发我的disableServer.sh 脚本。我尝试在disableServer.sh 中放置另一个墙柱,但它没有触发它。
该脚本由用户“nagios”运行。在 visudo 中添加了“nagios”,如下所示:
nagios ALL=(ALL)NOPASSWD:/root/scripts/disableServer.sh
从命令行以用户“nagios”身份运行此脚本效果非常好。但是,当事件处理程序触发它时,没有输出。我试图将输出捕获到日志文件中,但什么也没得到。这些是 /root/scripts/disableServer.sh 的权限:
-rwxr-xr-x 1 root root 2.0K Oct 12 15:01 disableServer.sh
为什么事件处理程序会命中“testDisableServer.sh”,但不会从 Nagios 事件处理程序执行“disableServer.sh”,而是以用户 nagios 的身份在 SSH 连接中正常工作?顺便说一句,“testDisableServer.sh”只是添加了一个额外层,用于查看事件处理程序是否正常工作(看起来确实如此)。在此脚本执行全部解决后,它将被删除。
答案1
可能是环境问题(脚本依赖于其环境中的某些内容,但在由 nagios 运行时不可用)。
我会将您的脚本(暂时仅用于调试)更改为:
#! /bin/bash -
exec 2> /tmp/log."$$"
set -x
wall "Script execution started";
/usr/bin/sudo /root/scripts/disableServer.sh force
set -x
并在顶部添加另一个disableServer.sh
查看发生了什么(在/tmp/log.*
文件中)。
答案2
就我而言,问题是:
sudo: sorry, you must have a tty to run sudo
所以你可以通过注释掉 /etc/sudoers 来禁用它
Defaults requiretty
无论如何,这没有任何好处。