我刚刚编写了一个简单的 bash 脚本来检查文件系统是否正在写入和删除文件,但是当我将其放入 Nagios 时,它从未按预期运行。
root@debian:~# cat /usr/lib/nagios/plugins/check_filesys.sh
#!/bin/bash
# Script que checa se file system consegue escrever/ler arquivos
if touch teste.txt && rm teste.txt; then
echo OK - Teste OK!
exit 0
else
echo CRITICAL - Teste de escrita/leitura falhou!
exit 2
fi
root@debian:~# ls -l /usr/lib/nagios/plugins/check_filesys.sh
-rwxrwxrwx 1 root root 217 Feb 5 10:40 /usr/lib/nagios/plugins/check_filesys.sh
我还找到了一个调试脚本来查看问题是什么,这就是输出:
2016-1-5 13:31:16 ------ debugging
cmd=[/usr/lib/nagios/plugins/check_filesys.sh]
output=[touch: cannot touch `teste.txt': Permission denied
CRITICAL - Teste de escrita/leitura falhou!
我尝试将 nagios 用户插入 /etc/sudoers 文件中,如下所示:
nagios ALL:NOPASSWD: /bin/bash -c /usr/lib/nagios/plugins/check_filesys.sh *
但问题仍然存在。OBS:我正在本地主机检查。
答案1
您需要使用 touch/rm 的完整路径,因为您的脚本正尝试在 中运行/
,而 Nagios 没有 的写入权限/
。
~/test.txt
(如果 $HOME 设置为合理的值,您可能就可以使用它。)
你可以自己验证一下:
# pgrep nagios
556
# ls -ls /proc/556/cwd
0 lrwxrwxrwx 1 root root 0 Feb 5 11:10 /proc/556/cwd -> /
这表明 Nagios 进程正在运行,并且cwd
设置为/
答案2
您的 nagios 插件将以您在 /etc/nagios/nrpe.cfg 中定义的“nrpe_user”身份运行。这可能是“用户 nagios 或用户 nrpe”。
如果您将脚本更新为 touch '/tmp/teste.txt'(换句话说,touch 具有开放权限的位置中的文件)它应该可以工作。
答案3
放入nagios
文件sudoers
不会有帮助如果你实际上没有调用 sudo。 尝试
nagios ALL=ALL NOPASSWD: /usr/lib/nagios/plugins/check_filesys.sh
并sudoers
让 nagios 调用
sudo /usr/lib/nagios/plugins/check_filesys.sh