我试图配置 rsync 以每天以当天的名称备份目录。
rsync --verbose --stats --compress --recursive /home/alpha/ /var/backups/alpha/`date +"%a"`
上述命令运行正常,并同步Mon
目录中的数据。但是当我将相同的命令复制到计划任务它不工作
13 16 * * * rsync --verbose --stats --compress --recursive /home/alpha/ /var/backups/alpha/`date +"%a"`
但是当我删除`日期 +"%a"`部分来自计划任务它起作用了。
为什么 cron 没有执行`日期 +"%a"`?
答案1
该%
符号必须用 进行转义\
,因为它是结束命令的另一种方式crontab
。
“第六个”字段(行的其余部分)指定要运行的命令。行的整个命令部分(直到换行符或 % 字符)将由 /bin/sh 或 cronfile 的 SHELL 变量中指定的 shell 执行。除非使用反斜杠 () 进行转义,否则命令中的百分号 (%) 将更改为换行符,并且第一个 % 之后的所有数据将作为标准输入发送到命令。
因此你的crontab
代码看起来应该是这样的:
13 16 * * * rsync --verbose --stats --compress --recursive /home/alpha/ /var/backups/alpha/`date +"\%a"`
资料来源:
答案2
您还可以使用:
13 16 * * * bash -c "rsync --verbose --stats --compress --recursive /home/alpha/ /var/backups/alpha/`date +'%a'`"