Crontab + Rsync - nada acontece :(

1

Olá, a linha interessante no meu crontab se parece com isso: (editou e salvou executando crontab -e)

23 *    * * *   rsync -av --delete [email protected]:/var/www/ /home/niklas >> /home/niklas/scripts/logfile

mas .. essa linha não faz nada (no 24º minuto nenhuma largura de banda é usada, nenhuma saída está no arquivo de log) alguém pode me dizer o que está errado?

BTW: a autenticação do servidor funciona por meio de uma chave pgp sem senha. é por isso que o usuário precisa ser 'niklas'

EDITAR:

executou type rsync , que retornou /usr/bin/rsync , mas que já está no caminho:

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

EDIT2:

criou / usr / bin / backup contendo:

rsync -av --delete [email protected]:/var/www/ /home/niklas/server4you_www >> /home/niklas/scripts/logfile

chmod + x'ed e alterei a entrada no chrontab para

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
16  *   * * *   /usr/bin/backup

ainda ... não está funcionando, embora o / var / log / syslog sais:

Aug  1 15:16:01 niklas-desktop CRON[9421]: (niklas) CMD (/usr/bin/backup)

por favor ajude

EDIT3:

Mudando

rsync -av --delete [email protected]:/var/www/ /home/niklas/server4you_www >> /home/niklas/scripts/logfile

para

/usr/bin/rsync -av --delete [email protected]:/var/www/ /home/niklas/server4you_www >> /home/niklas/scripts/logfile

como esperado não altera o resultado (insatisfatório). no entanto, 'colocando echo' xyz '> log escreve xyz no arquivo de log

então ... como você pode imaginar ... meu problema ainda não está resolvido.

adicionando um || echo "rsync died with error code $?" ao script de backup retornado:

rsync died with error code 5

que como link sugere que significa "Erro ao iniciar o protocolo cliente-servidor", então acho que algo é suspeito sobre o ssh. novamente eu estou usando uma chave pgp com uma senha, mas essa senha é desbloqueada por padrão pelo chaveiro na inicialização para que eu possa ssh [email protected] sem digitar uma senha. É possível enviar rsync a senha da chave ssh?

    
por niklasfi 01.08.2010 / 13:30

4 respostas

3

Coloque o caminho completo para o rsync até mesmo em seu / usr / bin / backup , para que a linha nesse arquivo seja iniciada

/usr/bin/rsync <your other options>

E tente colocar uma linha como

logger -t my_backup Hello from /usr/bin/backup

para o seu script / usr / bin / backup e veja se alguma coisa é registrada em / var / log / messages (ou outro arquivo de log, dependendo da configuração do seu syslog). Alternativamente, você pode substituir o logger com

echo "Hello from /usr/bin/backup" >/tmp/backuptest

Ah, às vezes, o SELinux pode causar problemas como os que você encontrou. Está em uso?

Espero que isso ajude.

EDITAR : Faça com que sua linha rsync de / usr / bin / backup seja como

/usr/bin/rsync <your options> || echo "rsync died with error code $?" >> your_log

Talvez possamos entender porque o rsync está tão chateado.

AINDA OUTRA EDIÇÃO : OK, código de erro rsync 5. Isso significa

rsync error: error starting client-server protocol

Na maioria das vezes, isso acontece devido à senha incorreta, mesmo que a mensagem pareça mais enigmática.

Se você executar manualmente o seu script rsync como niklas, isso funciona, certo?

EDIT 3 : Spotted sua menção sobre chaveiro . Eu acho que o cron não usa o mesmo chaveiro que o usuário niklas durante o seu login. É por isso que o login vai p00f ao tentar executá-lo do cron. Você poderia usar uma chave RSA sem senha para isso e apenas restringi-la para executar o rsync?

EDIT 4 : Use a variável de ambiente RSYNC_PASSWORD . Isso pode ser feito colocando isso no topo do seu script de backup:

export RSYNC_PASSWORD="myprecioussssssss"

ou se você gostaria de armazenar a senha em um arquivo de texto, crie um arquivo e forneça uma opção - password-file para o rsync.

Se isso não funcionar, você pode fornecer a opção -e 'ssh -o IdentityFile = / path / to / your_file para rsync.

    
por 01.08.2010 / 15:43
3

Você incluiu um campo de nome de usuário no seu crontab. Mas esse campo existe apenas no crontab do sistema ( /etc/crontab ), não no crontab por usuário que você edita com crontab -e . Então edite o crontab com crontab -e como usuário niklas , e faça o conteúdo

23 *    * * *    rsync -av --delete [email protected]:/var/www/ /home/niklas >> /home/niklas/scripts/logfile

O usuário que você executou crontab -e como deveria ter recebido um email com uma mensagem de erro (reclamando que niklas não é um comando válido). Caso contrário, pode haver um problema em sua configuração de e-mail.

    
por 01.08.2010 / 13:48
2

Você pode precisar do caminho completo para o comando rsync.

Por exemplo, no Fedora 13 você deve substituir o rsync por / usr / bin / rsync

    
por 01.08.2010 / 13:55
0

no meu caso (ubuntu) criando um shellscript e coloquei o comando rsync ao invés de executá-lo no crontab como o comando fez o truque. Agora sincronizando o trabalho como charme.

    
por 01.11.2014 / 11:04

Tags