我在网上查了一下,这可能是一个常见问题,但我不知道如何解决它,他们说的一切都不是我的情况......
cron 正在运行,我检查了一下,仍然没有日志文件(至少在 var/log 中没有),我正在使用 Debian 6,我的 .sh 运行良好,我手动尝试但在 cron 中不起作用......
这是我的 cron 代码(我使用 crontab -e 然后我重新启动 cron 服务,即使我认为这没有必要..)
14 12 * * * /root/mysqldump.sh > /root/MySQLdump.log
当时这只是我几分钟前做的一个测试...当我手动尝试时,mysqldump.sh 运行良好,但在 cron 上却不行...还有其他想法吗?
顺便问一下,2>&1 有什么作用?
提前致谢
编辑:
我启用了 cron 日志,现在我检查了我的日志文件,它是这样的
Feb 11 13:05:01 myserver /USR/SBIN/CRON[5652]: (root) CMD ("/home/dump/sqldump.sh")
但仅此而已,仅此而已……
答案1
这通常脚本以特定用户身份运行但在以下用户下失败的原因cron
是因为cron
在受限环境下运行,特别是最小的PATH
。
您的脚本 - 以及您的crontab
条目 - 需要引用具有完整路径的其他可执行文件/脚本,例如使用/usr/bin/mysqldump
而不是仅仅mysqldump
。
编辑:根据您的意见,您应该将脚本更改为类似以下内容,即确保使用 和 的完整路径mysqldump
:gzip
date
#!/bin/bash
DATE=`/bin/date +"db-%d-%m-%Y"`
/usr/bin/mysqldump -u user -ppassword mydb | /bin/gzip > /home/dump/$DATE.sql.gz
答案2
我认为是引用导致问题,请尝试以下操作
14 12 * * * "/root/mysqldump.sh > /root/MySQLdump.log"
2>&1 将 std 错误重定向到 std 输出
答案3
与大多数服务一样,cron 守护程序会将日志记录到 syslog 中,因此您可以在 中找到日志/var/log/syslog
。作业运行的日志消息如下所示:
Feb 11 11:09:01 mamma CRON[30555]: (mgorven) CMD (cat /proc/acpi/battery/BAT0/info > /tmp/BAT0-info)