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