我在主机定义中定义了以下服务:
define service {
use generic-service
host_name myhost.com
service_description swapcheck
check_command check_ssh_swap
}
以及命令中的以下内容.cfg:
define command {
command_name check_ssh_swap
command_line /home/nagios/bin/check_by_ssh -p port -H ip -C "/home/nagios/bin/check_swap -w 20% -c 5%"
}
两个CFG文件都在加载时加载到Nagios中。而 nagios -v/etc/nagios/nagios.cfg 不会返回任何错误。
当我尝试执行命令时
/home/nagios/bin/check_by_ssh -p port -H ip -C "/home/nagios/bin/check_swap -w 20% -c 5%"
直接使用 Nagios 用户,它可以毫无问题地工作,我得到我的结果,但是当 Nagios 本身运行计划检查时,我总是得到
Return code of 126 for check of host 'host' was out of bounds
我在这里错过了什么?显然,所有路径、键等都是正确的,否则我将无法毫无问题地手动执行它。
显然,nagios不喜欢绝对路径。我切换回$USER 1美元/...对于路径,现在它有效了吗?
Nagios 的退出代码 126 应该意味着检查已找到,但它不可执行。 也许您的脚本具有不正确的世界或其他权限,因此 Nagios 无法运行它,但您可以运行它?
您的问题没有确定您正在使用哪个操作系统平台,但我会猜测CentOS
. 如果是这种情况,请检查是否启用了SELinux
并强制执行: #getenforce
Enforcing
如果是这样,您有以下几种选择:
- 将脚本放在找到其他工作脚本的同一位置;您可能需要执行
restorecon
,以便为目录适当地标记脚本 - 了解如何使用
audit2allow
添加到 Nagios 脚本的有效位置
我根本不推荐但仅提及完整性的另一种可能性是禁用SELinux
. 在做这个之前,要仔细考虑一下,除了快速测试之外。