我有以下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.zip到inreadobase_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)
我假设您已将此添加为您自己用户的 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,您可以查看更多详细信息。
| 归档时间: |
|
| 查看次数: |
5746 次 |
| 最近记录: |