从 Nagios 事件处理程序执行脚本无法运行

从 Nagios 事件处理程序执行脚本无法运行

我在网络服务器上运行 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

无论如何,这没有任何好处。

相关内容