【问题标题】:Crontab executing script differentlycrontab 以不同方式执行脚本
【发布时间】: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 配合使用。
  • 我编辑了我的问题..

标签: linux bash crontab


【解决方案1】:

现在它可以工作了..看起来问题是因为我没有编写命令的完整路径..这是我现在正在使用的脚本并且它正在工作:

#! /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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-16
    • 2013-04-19
    • 2020-05-30
    • 2017-09-07
    • 1970-01-01
    • 2020-10-19
    • 2019-11-25
    • 2012-09-14
    相关资源
    最近更新 更多