Cron: Meus crontabs não parecem estar fazendo nada

1

Acho que estou perdendo alguma coisa. Eu configurei alguns crontabs para lidar com rsyncs em ssh no meu escritório para lidar com alguns backups, mas eles não parecem estar rodando OU registrando, para esse assunto. Estou faltando alguma coisa?

Aqui estão os meus crontabs:

0 2 * * * idealm /usr/bin/local/rsync -avz --rsync-path=/usr/bin/rsync -e ssh /Ideal\ Machinery\ Database/* [email protected]:~/db_backup >> /home/idealm/Work/cron_log.txt

^ do Mac mini Server para o servidor SME

0 2 * * * i /usr/bin/rsync -avz --rsync-path=/usr/local/bin/rsync -e ssh /home/e-smith/files/ibays/drive-i/files/Warehouse\ Pics/Converted\ Warehouse\ Pictures/* [email protected]:/ideal_img >> /home/i/cron_log.txt

^ do servidor SME para o Mac Mini Server

0 2 * * * i /usr/bin/rsync -rvz -e ssh /home/e-smith/files/ibays/drive-i/files/Warehouse\ Pics/* fm-backup@[remote server]:/home/fm-backup/img_all/ >> /home/i/cron_log.txt

0 2 * * * i / usr / bin / rsync -rvz -e ssh ~ / db_backup / * fm-backup @ [servidor remoto]: ~ / db_backup / > > /home/i/cron_log.txt

^ Do servidor SME para um servidor remoto executando o Ubuntu 10.10 (onde [servidor remoto] é o endereço censurado)

A coisa é, quando eu executo estes trabalhos do bash, tudo funciona perfeitamente - o cron simplesmente não parece estar funcionando. Alguma sugestão?

    
por eckza 06.04.2011 / 15:41

1 resposta

4

Primeiro, experimente alguns cronjobs simples e construa a partir daqui:

0 12 * * * user echo 'Hello, World!' >> /tmp/test.log 2>&1
1 12 * * * user ssh anotheruser@anotherhost ls >> /tmp/test.log 2>&1
2 12 * * * user rsync -e ssh anotheruser@anotherhost:/path/to/small/dir /tmp/test-dir >> /tmp/test.log 2>&1

Evite usar muitas opções no início, mas usar 2>&1 é importante para receber mensagens de erro. Você também pode usar 2>/tmp/test-error.log para enviá-los para um arquivo separado. Normalmente, o cron gera um email se, e somente se, houver alguma saída. Este e-mail é enviado para o endereço de e-mail mencionado na variável de ambiente MAILTO definida no crontab ou para o usuário unix local o job é executado como se MAILTO não estivesse configurado. Se você não tiver um servidor de e-mail instalado ou não tiver certeza de como acessá-lo, poderá redirecionar toda a saída para um arquivo. Outra coisa a considerar é configurar a SHELL. Por padrão, o cron usa / bin / sh, que normalmente é bom, e pode até ser um link simbólico para / bin / bash em alguns sistemas, mas se não, você espera usar bash-isms em seu comando, você pode adicionar SHELL=/bin/bash ou o que for apropriado antes de suas listas de empregos.

Outra questão que posso ver com seus crontabs acima são os espaços. Como os comandos funcionam em um shell normal, provavelmente não é o problema, mas seja cauteloso ao usar espaços ao usar certos comandos ssh remotos como: ssh server ls "Music Videos" , espaços em tais comandos precisam ser duplicados devido ao fato de que ambos shell local e shell remoto podem interpretá-los. O comando correto deve ser algo assim: ssh server ls "Music\ Videos" ou ssh server ls '"Music Videos"'

A última coisa que posso pensar é que o ssh está falhando na autenticação. Eu suponho que você esteja usando autenticação de chave pública. Onde sua chave pública está sendo armazenada? Ela está em ~/.ssh/id_rsa como uma chave privada não criptografada ou você a carregou em um Agente de chave pública SSH? Se ele for carregado em um agente porque a cópia em disco está criptografada, será necessário verificar se SSH_AUTH_SOCK está configurado manualmente no crontab para apontar para um agente que estará em execução quando o rsync estiver. Eu normalmente mantenho minhas chaves privadas criptografadas em disco e mantenho o ssh-agent em execução em segundo plano com um caminho de soquete fixo. Por exemplo, eu corro ssh-agent -a /tmp/user.agent seguido de SSH_AUTH_SOCK=/tmp/user.agent ssh-add .ssh/id_rsa para carregar a chave privada no agente. Eu tenho esses dois comandos em um script que eu executo manualmente após cada reinicialização desde que eu preciso digitar uma frase secreta para desbloquear a chave privada. Então eu tenho SSH_AUTH_SOCK=/tmp/user.agent no meu arquivo crontab para meus cronjobs automáticos usarem.

    
por 06.04.2011 / 20:19

Tags