【发布时间】:2015-04-15 15:04:38
【问题描述】:
我有一个脚本可以检查我的 Linux 服务器上是否正在运行 MySQL 服务。 如果我手动运行脚本,它可以正常工作,但是当 crontab 运行脚本时,它会得到不同的结果..
这是我的脚本:
#! /bin/sh
TODAY=$(/bin/date)
UP=$(/sbin/service mysql status| /bin/grep 'SUCCESS' | /usr/bin/wc -l);
if [ "$UP" -ne 1 ];
then
echo "mysql not working, Date: $TODAY" >> /scripts/sql_log.txt;
sudo /bin/mail -s "MySql is DOWN" mail@mail.com < /dev/null
sudo /sbin/service mysql start
else
echo "mysql is working, Date: $TODAY" >> /scripts/sql_log.txt;
fi
我正在使用命令的完整路径..我不理解 100% 的唯一部分是:
if [ "$UP" -ne 1 ];
这是什么 -ne 1?
所以在这种情况下 MySQL 正在运行: 如果我手动运行脚本,它会在日志文件中写入 MySQL 正在运行。 但是 crontab 只是在日志文件中写了 MySQL 没有运行(即使它正在运行)并且它没有发送任何邮件或其他东西
如果 mysql 服务停止并且我手动运行脚本,它会向我发送一封电子邮件并按应有的方式启动服务...
有什么想法吗?
【问题讨论】:
-
您的 cron 是否有运行服务命令的权限?我可能会做的是只用
service mysql status设置一个cron 作业,它应该将输出邮寄给你。然后你可以检查它说什么。它可能类似于Permission Denied甚至bash: service: command not found,无论哪种方式,它都会给你一些提示。 -
为什么它不发送电子邮件:可能是您的 sudo 调用阻塞,因为它提示输入密码。
-
我刚刚注意到我的
cron与不同的$PATH配合使用。 -
我编辑了我的问题..