我刚刚在 Ubuntu 22.04 上安装了 nagios 和 nrpe-version nrpe-4.1.0。它是一台连接到 nagios 服务器的主机。当我通过检查来运行脚本时/usr/local/nagios/libexec/check_sync.sh
。这在用户“ubuntu”下运行良好,但如果我通过
sudo su nagios -c "/usr/local/nagios/libexec/check_sync.sh"
出现错误
cat: /home/ubuntu/health.txt: Permission denied
bash: [: =: unary operator expected
与 nagios 服务器尝试检查时遇到的错误相同。基本上,不要认为在用户“nagios”下它能够读取该文件。我尝试更改该文件的权限,但没有用。这是我第一次在 Ubuntu 22.04 上运行 nrpe,不确定它是否已链接。当我执行时,它会出现相同的错误:
sudo su - nagios -c "cat /home/ubuntu/health.txt"
该文件确实存在,并且所有人都有权读取。脚本以以下内容开头:
#!/bin/bash -i
有什么想法可以解决这个问题吗?
#更新#
在 ubuntu LTS 22.04 上运行:Cronjob 运行一个命令,将 health.txt 文件放入
/home/ubuntu/health.txt
下面的脚本位于:
/usr/local/nagios/libexec/check_sync.sh
脚本运行以查看字符串值为 false 或 true
#!/bin/bash -i
catchup=$(cat /home/ubuntu/health.txt | awk -F"," '{print $20}' | awk -F"}" '{print $1}'| awk -F":" '{print $2}')
if [ $catchup = "false" ]; then
echo "Node is synced"
exit 0
else
echo "Not Synced"
exit 2
fi
如果我只运行脚本,它可以正常工作并给出值。
但是如果我运行:sudo su nagios -c "/usr/local/nagios/libexec/check_sync.sh" 我得到:
bash: cannot set terminal process group (110223): Inappropriate ioctl for device
bash: no job control in this shell
cat: /home/ubuntu/health.txt: Permission denied
bash: [: =: unary operator expected
Not Synced
我尝试将 health.txt 的目录从 /home/ubutu/ 更改为 /tmp/health.txt 以便用户 nagios 可以读取它,所以现在当我运行:
sudo su nagios -c "/usr/local/nagios/libexec/check_sync.sh"
bash: cannot set terminal process group (170765): Inappropriate ioctl for device
bash: no job control in this shell
Node is synced
但是,仍然在 nagastamon 上运行显示为“未同步”,这意味着它仍然无法正确读取文件。
namei -l /home/ubuntu/health.txt
f: /home/ubuntu/health.txt
drwxr-xr-x root root /
drwxr-xr-x root root home
drwxr-x--- ubuntu ubuntu ubuntu
-rw-rw-r-- ubuntu ubuntu health.txt
答案1
您的目录/home/ubuntu
仅限于用户和组ubuntu
,没有其他人可以进入此目录,包括用户nagios
。
允许nagios
访问文件夹(以及文件)的选项:
允许其他用户访问目录
chmod o+rx /home/ubuntu
将 nagios 添加到 ubuntu 组
sudo adduser nagios ubuntu
使用 ACL 允许 nagios 访问目录
setfacl -m u:nagios rx /home/ubuntu
第二个错误只不过是由于第一个错误而发生的后续错误。
您可以通过将变量括在引号中来防止这种情况:
if [ "$catchup" = "false" ]; then
你应该养成这样的习惯,它可以帮助你避免很多可能的错误。