rsync não funciona corretamente dentro do crontab

0

Eu estou tentando manter uma cópia de um monte de arquivos de um servidor remoto no meu servidor, e para fazer isso a cada 15 minutos eu quero trazer para o meu servidor os arquivos que foram alterados nos últimos 15 minutos (desde o último puxar)

Os arquivos podem ou não ser removidos do meu servidor de backup, então não quero rsync todos os arquivos porque isso copia novamente os arquivos que removi, a cada 15 minutos.

Para conseguir isso, faço um rsync a cada 15 minutos que busca os arquivos que foram alterados durante os últimos 15 minutos, no crontab desta maneira:

*/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

Quando executo este comando no shell, funciona muito bem.

No entanto, quando o crontab o executa, ele gera o seguinte erro: 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]

Portanto, parece que o crontab não expande o comando interno e o executa para obter a lista dos arquivos.

Existe algum problema em fazer com que o crontab assuma o comando normalmente? Eu prefiro não criar um script para um one-liner

    
por Antonio Ortells 09.02.2017 / 15:17

1 resposta

0

Eu mesmo descobri isso.

O problema é que o crontab não roda no bash por padrão, ele roda em sh.

Eu adicionei esta linha na parte superior do crontab e agora ela funciona bem:

SHELL = / bin / bash

    
por 09.02.2017 / 15:50