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

Max*_*kyi 3 bash cron

我有以下cron工作:

* * * * * /home/db_backups/test.sh
Run Code Online (Sandbox Code Playgroud)

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

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

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

* * * * * /home/db_backups/inreadobase_backup.sh
Run Code Online (Sandbox Code Playgroud)

脚本未运行 - 我在日志中看不到任何记录。可执行文件如果自己运行,则不会出错。这是文件的内容:

sudo mysqldump -h example.com -u username -ppassword dbname | gzip > db.zip
Run Code Online (Sandbox Code Playgroud)

这两个可执行文件都具有授予每个人的执行权限。我应该在哪里查看以查明问题?

编辑

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

*/5 * * * * mysqldump -h example.com -u username -ppassword dbname | gzip > db.zip
Run Code Online (Sandbox Code Playgroud)

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

*/5 * * * * /home/db_backups/inreadobase_backup.sh
Run Code Online (Sandbox Code Playgroud)

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

mysqldump -h example.com -u username -ppassword dbname | gzip > db.zip
Run Code Online (Sandbox Code Playgroud)

ter*_*don 7

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

sudo crontab -e
Run Code Online (Sandbox Code Playgroud)

然后,添加这一行:

* * * * * mysqldump -h example.com -u username -ppassword dbname | gzip > db.zip
Run Code Online (Sandbox Code Playgroud)

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


回应您的编辑:

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

#!/bin/sh
/usr/bin/mysqldump -h example.com -u username -ppassword dbname | /bin/gzip > /home/maximus/db.zip 
Run Code Online (Sandbox Code Playgroud)

然后,要捕获任何错误,请通过添加2> file到您的cron行将脚本的错误输出重定向到文件:

*/5 * * * * /home/db_backups/inreadobase_backup.sh 2> /tmp/cron.error
Run Code Online (Sandbox Code Playgroud)

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