根据对我的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 命令输出的邮件。我这边有什么问题?
几种可能:
Cron 不会将完整的用户环境传递给在 cron 下运行的脚本。因此,像 $PATH 这样的变量在 cron 下运行可能与在用户终端中运行不同。
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)