编辑后损坏的 cron 作业

编辑后损坏的 cron 作业

我在理解为什么以下 cronjob 不再起作用时遇到一些困难:

30 3 * * * /path/to/backup_script.sh && tar -czvf /path/to/archived/backups/retain_last_3_backups/backup-community_$(date '+%Y%m%dT%H%M%S').tar.gz -C /path/to/source/backup/folder/ .

如果我使用拥有 crontab 的同一用户手动运行它,它确实可以工作。当我几天前编辑它时,它停止工作添加&& tar -czvf [...]

我应该以不同的方式调用date命令吗?或逃避$(我现在要测试这个,刚刚注意到它)?

感谢David Sánchez Martín,我找到了具体的日志,它报告以下错误:

/bin/sh: 1: Syntax error: Unterminated quoted string

答案1

这些%符号在条目中很特殊crontab,因此您不能直接在date格式字符串中使用它们。

man 5 crontab

第六个字段(该行的其余部分)指定要运行的命令。该行的整个命令部分(直到换行符或字符)将由cronfile 变量中指定的 shell%执行。命令中的百分号( ),除非用反斜杠( )转义,否则将被更改为换行符,并且第一个之后的所有数据都将作为标准输入发送到该命令。/bin/shSHELL%\%

答案2

首先,为了调试和监控这一点,根据经验,在 crontab 中添加一个 MAILTO 变量,如果标准错误中出现问题,它会通过电子邮件发送给您。

# crontab -e
[email protected]
30 3 * * * /usr/local/bin/blahblah.sh

另请注意,如果命令在标准输出中输出某些内容,如果您不希望在邮件中输出某些内容,则可以将其重定向为 null 。

30 3 * * * /usr/local/bin/blahblah.sh > /dev/null

然后,如果您不确定该命令,请将日期作为变量,如下所示

30 3 * * * /path/to/backup_script.sh && THEDATE=$(date +%Y%m%dT%H%M%S) tar -czvf /path/to/archived/backups/retain_last_3_backups/backup-community_$THEDATE).tar.gz -C /path/to/source/backup/folder/ .

我认为更具可读性,并且没有潜伏的变量。

相关内容