脚本手动运行,但不是从 cron 运行

Ron*_*aby 4 cron

根据对我的mysql复制状态的监控。我用下面的代码写了一个简单的shell脚本

#!/bin/bash
date > /tmp/mysql_repl_status.txt
cd /usr/bin/
"/usr/bin/mysql" "-e" "SHOW SLAVE STATUS \G" >> /tmp/mysql_repl_status.txt
mail -s "Netspective MySQL replication status" name@abc.com < /tmp/mysql_repl_status.txt
Run Code Online (Sandbox Code Playgroud)

问题是当我手动执行此脚本时它工作正常,但使用 cron 脚本不起作用。

使用 cron 只获取带有 date 命令输出的邮件。我这边有什么问题?

Tim*_*edy 5

几种可能:

  1. Cron 不会将完整的用户环境传递给在 cron 下运行的脚本。因此,像 $PATH 这样的变量在 cron 下运行可能与在用户终端中运行不同。

  2. Cron 要求在每一行的末尾有一个换行符,所以在 crontab 文件的末尾总是保留一个空行。


也许在脚本中指定完整路径,然后看看是否可以开始。

#!/bin/bash
statfile=/tmp/mysql_repl_status.txt
/bin/date > $statfile
cd /usr/bin
/usr/bin/mysql -e "SHOW SLAVE STATUS \G" >> $statfile
/bin/mail -s "Netspective MySQL Replication Status" name@abc.com < $statfile
Run Code Online (Sandbox Code Playgroud)