O Ubuntu 12.04 não está funcionando com um dos meus comandos crontab… alguma idéia?

4

No meu arquivo crontab ( sudo crontab -e ) eu tenho os seguintes comandos:

*/1 * * * * wget -q -O /dev/null http://help.mysite.com/inc/mail/hesk_pop3.php
0 7 * * * bash -c "/home/backup/backupscript.sh"

A primeira linha é executada e funciona corretamente, mas a segunda linha não está funcionando por algum motivo. No entanto, se eu executar o script através do terminal ( ./backupscript.sh ), ele será executado corretamente.

O arquivo backupscript.sh é de propriedade root: root e possui 755 permissões.

Dentro desse arquivo está o seguinte código:

#!/bin/bash

/usr/bin/mysqldump -u root -wordpresspassword wordpressusername | /bin/gzip > /home/backup/mysql/wordpress_'date +%m-%d-%Y_%T'.sql.gz
/usr/bin/mysqldump -u root -heskpassword heskusername | /bin/gzip > /home/backup/mysql/hesk_'date +%m-%d-%Y_%T'.sql.gz
/bin/tar cvzf /home/backup/wordpress/wordpress_'date +%m-%d-%Y_%T'.tar.gz /var/www/wordpress/
/bin/tar cvzf /home/backup/hesk/hesk_'date +%m-%d-%Y_%T'.tar.gz /var/www/hesk/
/usr/bin/s3cmd sync -r -P /home/backup/ s3://backups.mysite/
find /home/backup/ -mtime +7 -type f -exec rm {} \;

O script basicamente faz o backup dos nossos bancos de dados MySQL e os compacta, faz o backup dos nossos sites apache e os compacta, copia esses arquivos para o Amazon S3 e executa uma limpeza no servidor.

O que estou perdendo aqui? Eu tentei uma série de coisas como mudar de bash para shell, mas nada que eu fiz funcionou ainda.

    
por Kris Anderson 04.10.2012 / 21:21

2 respostas

1

uma solução alternativa é usar o script de shell para fazer isso:

for (( ; ;))
do
   sleep 86400
   wget -q -O http://help.mysite.com/inc/mail/hesk_pop3.php
   /bin/sh /home/backup/backupscript.sh
done

No script acima, usei sleep 86400 (é equivalente a um dia em segundos). Você pode configurar seu intervalo de acordo.

Se você deseja executar em algum servidor / área de trabalho registrando usando ssh, inicie / execute este script como um processo em segundo plano.

    
por Vivek 19.01.2013 / 08:41
1

Dicas gerais para depurar o crontab:

  1. capture a saída.
    • redirecioná-lo para um arquivo, por exemplo %código%
    • ou certifique-se de que o crond envie a saída como email para sua caixa de correio, definindo { command1; command2; } &>/tmp/joboutput no seu crontab.
  2. O ambiente de shell do processo chamado por crontab difere do ambiente e iniciou o mesmo processo em um terminal.
    Assegure-se de que todas as variáveis de ambiente necessárias sejam especificadas dentro do crontab.
  3. % tem um significado especial no crontab (leia atentamente [email protected] :-)
      

    A parte inteira do comando da linha, até uma nova linha ou caractere%, será executada por / bin / sh ou pelo shell especificado na variável SHELL do arquivo crontab. Os sinais de porcentagem (%) no comando, a menos que tenham escapado com barra invertida (), serão alterados em caracteres de nova linha e todos os dados após o primeiro% serão enviados para o comando como entrada padrão. Não há como dividir uma única linha de comando em várias linhas, como "\" no shell.

  4.   
por H.-Dirk Schmitt 13.10.2012 / 16:35

Tags