我的工作如下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
更多详细信息。