我有一个数据库备份命令,它接受一个mysql转储,然后将该转储文件上传到AWS S3,当我以普通用户身份运行该命令时,它工作正常,但是当我在cron作业中使用相同的命令时,它会失败。
我检查了系统日志,并且没有错误消息说工作后出现问题。只有一行说该作业已运行,然后继续运行下一个cron作业。
命令如下,我删除了敏感部分:
mysqldump -u {{ db_user }} -p{{ db_password }} {{ db_name }} > /home/db_backup.sql | aws s3 cp /home/db_backup.sql s3://{{ s3_url }}/$(date --iso-8601=seconds)_db.sql --profile backupprofile
当普通用户运行此命令时,警告输出不会在命令行中使用mysql密码,但这对于命令在没有交互的情况下工作至关重要。还有第二行或S3说上传工作。这些输出能否影响cronjob?
答案 0 :(得分:1)
您需要在cronjobs上设置完整路径,我发现您错过了aws
以及whereis mysqldump
的连接网址。我会whereis aws
和Rob Percivals Android N Developer course on Udemy.com
找到运行它所需的完整路径。
答案 1 :(得分:1)
尝试检查环境变量,cron将一组最小的环境变量传递给您的作业。您可以在crontab
中轻松设置PATHPATH=/usr/local/bin:/usr/sbin
使用sh也有很多cron执行命令,你可能在脚本中使用了另一个shell。你可以通过在crontab的顶部设置shell来告诉cron在bash中运行所有命令:
SHELL=/bin/bash
Cron试图解释%符号,如果你的命令中有一些,你需要逃避它。
答案 2 :(得分:0)
如果在运行命令后首先出现的输出是交互式的,如果这要求你输入回车或类似的东西,这就是问题,否则不应该对此有任何问题。