rsync via cron. Como habilito o log?

8

Estou fazendo backup de um servidor remoto em outro computador usando o rsync.

No cron.daily eu tenho um arquivo com isso:

rsync -avz -e ssh [email protected]:/ /mybackup/

Ele usa um par de chaves pública / privada para fazer login. Isso parece funcionar bem na maioria das vezes, no entanto, eu (tolamente) só realmente verifiquei olhando as datas em alguns arquivos importantes (despejos do MySQL) que eu sei que mudam todos os dias. Obviamente, um erro pode ocorrer após esse arquivo.

Às vezes falha. Quando eu o executo manualmente, algo como "redefinição do cliente" às ​​vezes acontece.

Qual é a melhor maneira de registrá-lo para que eu possa verificar com certeza se ele foi concluído ou não? O log cron não indica nenhum erro. Eu não tentei, mas a página de manual rsync na versão antiga do CentOS na máquina de backup não mostra a opção --log-file. Eu acho que eu poderia redirecionar o stdout com> mas eu realmente não quero saber sobre todos os arquivos. Eu só quero saber se tudo funcionou ou não ..

obrigado

tetranz
fonte

Respostas:

13

Eu acho que você já resolveu sua própria pergunta. Se você redirecionar stdout e stderr para um arquivo, não obterá saída para cada transferência de arquivo rsync - isso só é produzido se você estiver executando no modo detalhado ( -v). O comportamento padrão de rsyncé produzir apenas saída no evento de um erro. Então você pode fazer isso ...

rsync ... > /var/log/rsync.log 2>&1

... e inspecione esse arquivo para ver se o rsync mais recente foi bem-sucedido ou não. Estou usando explicitamente >, que substituirá o arquivo de log sempre que for rsyncexecutado.

Você também pode tirar proveito do fato de que rsyncsai com um código diferente de zero quando a transferência falha, então você pode fazer algo assim:

rsync ... || echo "rsync failed" | mail -s 'rsync falied' [email protected]
larsks
fonte
Obrigado. Vou tentar. Presumi que receberia todos os arquivos no log, porque é isso que vejo na tela se eu tentar manualmente, sem detalhes. A coisa do correio parece boa.
tetranz
Se você estiver executando o rsync manualmente sem o -vsinalizador e ainda estiver vendo a saída por arquivo, há algo errado. A página de manual do rsync diz: "Por padrão, o rsync funciona silenciosamente. Um único -v fornecerá informações sobre quais arquivos estão sendo transferidos e um breve resumo no final".
Larsks
Bem, isso é definitivamente o que está acontecendo. -v parece estar ativado por padrão. Acabei de fazer o redirecionamento de log, como você sugere, e o log possui uma linha para cada arquivo. Não estou dizendo que você está errado. O CentOS deve ter compilado o rsync de maneira diferente. Adicionei exclusões para / proc e / sys.
Tetranz
Estou executando o CentOS e o rsync se comporta conforme descrito. Como é sua linha de comando?
Larsks
1
Veja, você está executando no modo detalhado. Você tem um -vlá.
Larsks
4

Retire a opção -v e adicione -q. Isso só dará os erros

Matt
fonte
1

Talvez você possa usar o syslog através do comando: logger .

Eu executo scripts desta maneira:

rsync -v what user@host 2>&1 | logger -t backup

Isso será gravado /var/log/messagespor padrão.

user897079
fonte