root crontab 未执行

root crontab 未执行

我正在设置我的 Debian 服务器,以使用 crontab、mysqldump 实用程序和 gunzip 备份我的数据库。

由于某种原因,我的 crontab 行似乎失败了,尤其是关键的一行:

15 2 * * * /usr/bin/mysqldump --user=root --password=XXX --all-databases | /bin/gzip > /backup/database_`date '+%d-%m-%Y'`.sql.gz

我已经阅读了几个关于这种行为的可能起源的主题,但我仍然不明白为什么这个 crontab 作业在我执行以下操作后仍然无法创建文件的原因:

  • 使用root权限:我用它sudo crontab -e来编辑root crontab。
  • 使用 whereis 查找我正在使用的命令的完整路径,例如用mysqldump替换/usr/bin/mysqldump
  • 检查整行是否在 root 下工作:它确实创建了一个带有今天日期的档案,其中填充了 mysqldump 结果(显示警告,因为我在 CLI 中使用了密码,但我不认为这会导致 crontab 出现任何问题,对吗?)

我认为我在 crontab 中配置此行的方式有问题,但我看不到它。

显然,crontab 运行正常,因为当我附加该行时,* * * * * env > /backup/env.txt我确实得到了一个包含 /backup 文件夹中的 env 内容的文件......

有人对此有线索吗?

谢谢 !

~斯蒂芬

答案1

cron的默认路径是:

PATH=/usr/bin:/usr/sbin:.

date实用程序位于,/bin/因此您需要:

  1. 明确地将此目录添加到PATHforcron

    PATH=/bin/:/usr/bin:/usr/sbin:.
    15 2 * * * mysqldump --user=root --password=XXX --all-databases | gzip > /backup/database_$(date '+%d-%m-%Y').sql.gz
    

或者

  1. 提供命令的完整路径date

    15 2 * * * /usr/bin/mysqldump --user=root --password=XXX --all-databases | /bin/gzip > /backup/database_$(/bin/date '+%d-%m-%Y').sql.gz
    

我更喜欢第一个选项,因为第二种方法很容易出错并忘记提供所有命令的完整路径(例如date在您的问题中)。

答案2

好的,我发现什么对我来说不起作用:

通过跟踪/var/log/syslog,我发现 crontab 有行大小限制!因此,当读取该行时,它会停在那里:... $(date +'使得该行在执行时出现“错误”。

我的解决方案是将作业移至 /root/backup.sh 脚本并使用以下命令编辑 crontab:

15 2 * * * /root/backup.sh

至少,现在我可以备份我的数据了!!

我希望这个解决方案能够帮助其他人;)

相关内容