linux - 通过 Cron 的 Bash 脚本结果不同

标签 linux bash cron

我是 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

最佳答案

首先要做的是检查你的路径。你的 cron 环境有一个最小的设置——它不是你的用户 BASH 环境的模拟。您可能希望使用“服务”的完整路径,例如

STATUS=$(/usr/sbin/service nagios status)  

有关 cron BASH 环境的更详细说明: https://serverfault.com/questions/698577/why-is-the-cron-env-different-from-the-users-env

关于linux - 通过 Cron 的 Bash 脚本结果不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48633277/

相关文章:

linux - 关于vim中的制表符大小

linux - 在 Linux 中使用 smb 查询 mdb(ms Access )文件的最简单选项

cron - 如何检查 Neo4J 是否在服务器上运行?

linux - Cron 每分钟运行一次(在 bash 中运行但不在 cron 中运行)

linux - 进程卡在退出,显示为僵尸但无法收割

c++ - 如何从可执行文件中打开 bash?

linux - CSV 上的复杂 awk 循环

json - jq 不适用于带有破折号和数字的标签名称

bash - Matlab 和 gnu 并行

php - 如何防止 cronjob foreach 循环向每个结果行发送电子邮件?