rsync 在 crontab 中无法正常工作

rsync 在 crontab 中无法正常工作

我正在尝试在我的服务器中维护来自远程服务器的一堆文件的副本,并且每 15 分钟将过去 15 分钟内更改的文件(自上次拉取以来)带到我的服务器

这些文件最终可能会从我的备份服务器中删除,也可能不会,所以我不想 rsync 所有文件,因为这会每 15 分钟重新复制一次我已删除的文件。

为了实现这一点,我每 15 分钟执行一次 rsync,以获取过去 15 分钟内发生变化的文件,在 crontab 中采用以下方式:

*/15 * * * * rsync -av --files-from=<(ssh root@remote-server 'find /remote/directory -type f -name remote-server-files.* -mmin -15 -exec basename {} \;' ) root@remote-server://remote/directory /local/directory 2> /var/log/rsync_cron.log && echo "[$(date)] Remote files saved successfully" >> /var/log/rsync_cron.log

当我在 shell 中运行此命令时,它运行正常。

但是,当 crontab 运行它时,它会抛出以下错误: rsync: failed to open files-from file <(ssh root@remote-server find /remote/directory -type f -name remote-server-files.* -mmin -15 -exec basename {} \; ): No such file or directory rsync error: syntax or usage error (code 1) at main.c(1422) [client=3.0.6]

因此看起来 crontab 不会扩展内部命令并执行它来获取文件列表。

有什么办法可以让 crontab 正常执行命令吗?我宁愿不为一行代码创建脚本

答案1

我自己已经弄清楚了。

问题是 crontab 默认不在 bash 上运行,而是在 sh 上运行。

我在 crontab 的顶部添加了这一行,现在它运行正常:

外壳=/bin/bash

相关内容