Я пытаюсь сохранить копию набора файлов с удаленного сервера на моем сервере и делать это каждые 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

Когда я запускаю эту команду в оболочке, она работает просто отлично.

Однако, когда 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 ответ1

0

Я понял это сам.

Проблема была в том, что crontab по умолчанию не запускается на bash, а на sh.

Я добавил эту строку вверху crontab, и теперь она работает нормально:

SHELL =/bin/ Баш

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .