如果我在 shell 中输入以便从远程服务器本地备份数据库文件,并且每个新备份文件都附加了日期,则此命令有效,因此它们都是不同的:
rsync -avz -Iu --backup developer@xxx.xxx.xxx.xxx:/home/database.sqlite /home/ProdBackups/dbBackup_(date +\%Y\%m\%d\%H\%M\%S).sqlite
但是当我尝试将它作为 crontab 中的 cronjob 运行时:* * * * * rsync -avz -Iu --backup developer@xxx.xxx.xxx.xxx:/home/database.sqlite /home/ProdBackups/dbBackup_(date +\%Y\%m\%d\%H\%M\%S).sqlite
我收到此错误:Syntax error: "(" unexpected
我怎样才能解决这个问题?
最佳答案
获取 date
要替换为格式化日期,您需要在括号中使用“$”强制执行。
* * * * * rsync -avz -Iu --backup developer@xxx.xxx.xxx.xxx:/home/database.sqlite /home/ProdBackups/dbBackup_$(date +\%Y\%m\%d\%H\%M\%S).sqlite
作为替代方案,考虑创建一个小的包装脚本 backup.sh,然后从 cron 执行 backup.sh 脚本# ~/cron/backup.sh
timestamp=$(date '+%Y%m%d%H%M%S')
rsync -avz -Iu --backup developer@xxx.xxx.xxx.xxx:/home/database.sqlite /home/ProdBackups/dbBackup_$timestamp.sqlite
cron 将是:* * * * * $HOME/cron/backup.sh
优点是您可以测试备份脚本,然后从 cron 按原样执行它,而不必担心引用日期格式等。
关于linux - rsync 命令有效,但不能作为 cronjob,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65793545/