root crontab não executando

4

Estou configurando meu servidor Debian para fazer backup de meus bancos de dados com o crontab, o utilitário mysqldump e o gunzip.

Por alguma razão, minhas linhas crontab parecem falhar, especialmente a crucial:

15 2 * * * /usr/bin/mysqldump --user=root --password=XXX --all-databases | /bin/gzip > /backup/database_'date '+%d-%m-%Y''.sql.gz

Eu li vários assuntos sobre as possíveis origens deste comportamento, mas ainda assim não consigo ver a razão pela qual esse trabalho do crontab ainda falha ao criar o arquivo depois de eu:

  • Usado os privilégios de root: eu uso sudo crontab -e para editar o crontab raiz.
  • Usei um whereis para encontrar os caminhos completos dos comandos que estou usando, substituindo, por exemplo, mysqldump por /usr/bin/mysqldump .
  • Verificou que toda a linha trabalha sob root: cria um arquivo com a data de hoje, preenchido com o resultado mysqldump (mostrando um aviso porque estou usando uma senha na CLI, mas não acho que causar algum problema com crontab, certo?)

Suponho que algo esteja errado na maneira como configuro essa linha no crontab, mas não consigo vê-la.

Aparentemente, o crontab está funcionando corretamente porque quando eu adiciono a linha * * * * * env > /backup/env.txt eu recebo um arquivo que contém o conteúdo env na pasta / backup ...

Alguém teria uma pista sobre isso?

Obrigado!

~ Stéphane

    
por Stephane.P 15.06.2016 / 10:34

2 respostas

2

O caminho padrão para o cron é:

PATH=/usr/bin:/usr/sbin:.

O utilitário date está localizado em /bin/ , então você precisaria:

  1. adicione explicitamente este diretório ao PATH para cron

    PATH=/bin/:/usr/bin:/usr/sbin:.
    15 2 * * * mysqldump --user=root --password=XXX --all-databases | gzip > /backup/database_$(date '+%d-%m-%Y').sql.gz
    

ou

  1. forneça o caminho completo para o comando date :

    15 2 * * * /usr/bin/mysqldump --user=root --password=XXX --all-databases | /bin/gzip > /backup/database_$(/bin/date '+%d-%m-%Y').sql.gz
    

Eu prefiro a primeira opção, pois o segundo método torna muito fácil cometer um erro e esqueço de fornecer o caminho completo para todos os comandos (como date em sua pergunta).

    
por 15.06.2016 / 11:26
2

OK, achei o que não estava funcionando para mim:

Ao finalizar o /var/log/syslog , descobri que o crontab tem um limite de tamanho de linha! Então, ao ler a linha, estava parando aí: ... $(date +' fazendo a linha "bug" na execução.

Minha solução foi mover o trabalho para um script /root/backup.sh e editar o crontab usando:

15 2 * * * /root/backup.sh

Pelo menos, agora posso fazer backup dos meus dados !!

Espero que esta solução ajude os outros;)

    
por 15.06.2016 / 12:12