linux - rsync 命令有效,但不能作为 cronjob

标签 linux shell ubuntu backup rsync

如果我在 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/

相关文章:

linux - 当扩展名不在文件名中时使用 ImageMagick 转换图像

linux - 更改目录中的文件名

mysql - 动态 Shell 变量替换

regex - 在没有 Bashisms 的情况下检查 Shell 中的子字符串

linux - 如何等待命令的特定输出字符串并执行另一个命令

linux - 如何使用命令的输出作为 linux 中其他程序的输入?

linux - 如何使用cp linux将同名文件从多个目录复制到新目录

linux - 卡在连接到亚马逊 ec2 中的 us-west-2.ec2.archive.ubuntu.com

Ubuntu 上的 Eclipse Indigo 经常挂起或卡住

linux模式匹配程序输入