【发布时间】:2020-08-05 02:15:01
【问题描述】:
我写的 NRPE 检查有问题。
这是一个简单的 shell 脚本,运行“systemctl is-active [service_name]”并将值返回给我们的 Thruk。
当我直接使用用户 nrpe 运行脚本时,它可以工作:
-bash-4.2$ /usr/lib64/nagios/plugins/check_service_active.sh --service dynflowd
dynflowd
Service dynflowd démarré
但是当我在本地使用 NRPE 运行它时,它告诉我服务已停止:
-bash-4.2$ ./check_nrpe -H 127.0.0.1 -c check_service_active -a 'dynflowd'
dynflowd
Service dynflowd arrêté
经过多次测试,我发现它与 systemctl 命令相关联。 当我用另一个命令(如“echo”)替换 systemctl 时,它可以工作。
所以我认为 NRPE 和 systemctl 有一些东西,但我找不到什么? 而且我在 Google 上找不到任何关于它的信息。
所以我来了!
提前感谢您的回复,如果我不够理解,请见谅。
这是我的脚本:
#!/bin/sh
#
# Script d'interrogation d'un service via systemctl
# Nagios return codes
STATE_OK=0
STATE_WARNING=1
STATE_CRITICAL=2
STATE_UNKNOWN=3
STATE_DEPENDENT=4
#Recuperation des parametres
while test -n "$1"; do
case "$1" in
--service)
SERV=$2
shift
;;
-u)
print_usage
exit $STATE_OK
;;
esac
shift
done
STAT=$(systemctl is-active $SERV)
if [[ $STAT == "active" ]]
then
echo "Service $SERV démarré"
exit $STATE_OK
else
echo "Service $SERV arrêté"
exit $STATE_CRITICAL
fi
【问题讨论】:
-
几个问题: 1/ 打印输出的第一行(服务名称本身)是什么?脚本中似乎没有任何内容可以执行此操作。 2/ NPRE 版本如何,假设它在某个时候调用相同的脚本,当您没有
--server参数时设置SERV变量?我可能不知道 NPRE 的实际工作原理,但这两个问题的答案可能会指导您。 -
1/ 变量 $STAT 包含我的命令的值(在这里,它可以是活动的或非活动的),根据此,脚本打印服务的状态并使用正确的代码退出:好的或关键的。 2/ 我不知道我是否正确理解了您的问题,但它是 NRPE v3.2.1。设置“SERV”变量的是“--service”参数。
-
1/ 是的,但是脚本唯一打印的是
Service $SERV démarré/arrêté这一行,而您的输出有两行@987654327 @ 和Service dynflowd arrêté。第一行输出来自哪里? 2/ 我知道--service设置SERV当你将它提供给脚本时,我只是问你执行的--service来自哪里check_nrpe命令 - 你所拥有的就是-a.在check_nrpe和对您的脚本的调用之间是否还有其他配置? -
1/ 我忘了第一行,对不起。这只是测试
SERV变量是否设置正确。 2/ 我忘了在我的 nrpe.cfg 中添加设置 nrpe 命令的行:command[check_service_active]=/usr/lib64/nagios/plugins/check_service_active.sh --service $ARG1$ -
因此可以使用
-c check_service_active读取命令check_nrpe -H 127.0.0.1 -c check_service_active -a 'dynflowd'(=执行命令check_service_active)和参数-a 'dynflowd'
标签: shell systemctl nrpe thruk