我对bash脚本编程比较陌生,但是我编写了一个小脚本,用于检查服务的状态,如果没有运行则重新启动它。 cron中的设置很好并且正在运行,我遇到的问题是设置变量“STATUS”,如下面的代码所示。当我从提示符运行脚本时它运行正常,但是当它通过cron运行时,STATUS变量不会被设置。谁能告诉我这里发生了什么?
谢谢!
#!/bin/bash
STATUS=$(service nagios status)
DATE=$(date)
if [ "$STATUS" == "No lock file found in /var/run/nagios.pid" ]
then
service nagios start
echo "$DATE - Stopped - $STATUS" >> /var/log/nagios/nagios_check.log
elif [ "$STATUS" == "nagios is not running" ]
then
service nagios start
echo "$DATE - Stopped - $STATUS" >> /var/log/nagios/nagios_check.log
else
echo "$DATE - Running - $STATUS" >> /var/log/nagios/nagios_check.log
fi
答案 0 :(得分:2)
要做的第一件事就是检查你的路径。您的cron环境具有最小的设置 - 它不是您的用户BASH环境的模拟。您可能希望使用' service'的完整路径,例如
STATUS=$(/usr/sbin/service nagios status)
有关cron BASH环境的更详细说明: https://serverfault.com/questions/698577/why-is-the-cron-env-different-from-the-users-env