为什么我的转储 MySQL 数据库的 cron 脚本没有执行?

为什么我的转储 MySQL 数据库的 cron 脚本没有执行?

我的工作如下cron

* * * * * /home/db_backups/test.sh

它运行良好,每分钟执行一次。如果我检查,sudo grep \(CRON\) /var/log/syslog我会得到以下结果:

Jun 23 11:30:01 analytics CRON[9301]: (CRON) info (No MTA installed, discarding output)

但是,如果我将可执行文件更改为inreadobase_backup.sh

* * * * * /home/db_backups/inreadobase_backup.sh

脚本未运行 - 我在日志中看不到任何记录。如果可执行文件单独运行,则不会出现任何错误。以下是文件的内容:

sudo mysqldump -h example.com -u username -ppassword dbname | gzip > db.zip

这两个可执行文件都授予了所有人执行权限。我应该查看哪里来找出问题所在?

编辑

sudo crontab -e如果我添加以下行,则作业将运行并成功创建备份:

*/5 * * * * mysqldump -h example.com -u username -ppassword dbname | gzip > db.zip

但是,如果我将执行行移至mysqldump... db.zip文件inreadobase_backup.sh并为该作业指定它:

*/5 * * * * /home/db_backups/inreadobase_backup.sh

该作业不会创建备份。我不知道如何检查它是否运行以及它输出什么错误(如果有)。如果我简单地/home/db_backups/inreadobase_backup.sh在命令行中执行,就会创建备份。文件包含的唯一一行是:

mysqldump -h example.com -u username -ppassword dbname | gzip > db.zip

答案1

我假设您已将其添加为您自己的用户的 crontab。问题是cron无法进行身份验证,sudo因此无法运行您的命令。最简单的解决方法是将 crontab 添加到root的帐户:

sudo crontab -e

然后,添加以下行:

* * * * * mysqldump -h example.com -u username -ppassword dbname | gzip > db.zip

如此简单的事情不需要脚本,所以您不妨添加命令本身。无论哪种方式,您都不想使用sudo它。


回应您的编辑:

为了排除各种可能的并发症,使其inreadobase_backup.sh看起来像这样:

#!/bin/sh
/usr/bin/mysqldump -h example.com -u username -ppassword dbname | /bin/gzip > /home/maximus/db.zip 

2> file然后,为了捕获任何错误,通过在您的行中添加以下内容将脚本的错误输出重定向到文件cron

*/5 * * * * /home/db_backups/inreadobase_backup.sh 2> /tmp/cron.error

然后您可以查看/tmp/cron.error更多详细信息。

相关内容