Crontab执行脚本的方式不同

时间:2015-04-14 12:31:59

标签: linux bash crontab

我有一个脚本可以检查我的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

我正在使用命令的完整路径。我唯一不理解的部分是:

if [ "$UP" -ne 1 ];

这是什么-ne 1?

所以在这种情况下,MySQL正在运行: 如果我手动运行脚本,它会写入MySQL正在日志文件中运行。 但是Crontab只是写了MySQL没有在日志文件中运行(即使它正在运行)并且它不发送任何邮件或其他东西

如果mysql服务已停止并且我手动运行该脚本,它会向我发送一封电子邮件并按原样启动该服务...

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

现在它工作..看起来问题是由于我没有写出命令的完整路径引起的问题。这是我现在使用的脚本,它正在工作:

#! /bin/sh
UP=$(/sbin/service mysql status| /bin/grep 'SUCCESS' | /usr/bin/wc -l);
if [ "$UP" -ne 1 ];
then
        sudo /bin/mail -s "MySql is DOWN" mail@mail.com < /dev/null
        sudo /sbin/service mysql start      
fi