root crontab não está executando

root crontab não está executando

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 do 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 desse comportamento, mas ainda não consigo ver o motivo pelo qual esse trabalho crontab ainda falha ao criar o arquivo depois de:

  • Usei os privilégios de root: eu uso sudo crontab -epara editar o crontab root.
  • Usei um whereis para encontrar os caminhos completos dos comandos que estou usando, substituindo por exemplo mysqldumppor /usr/bin/mysqldump.
  • Verifiquei se toda a linha funciona no root: ela cria um arquivo com a data de hoje, preenchido com o resultado do mysqldump (mostrando um aviso porque estou usando uma senha na CLI, mas não acho que isso causaria nenhum problema com crontab, certo?)

Suponho que algo esteja errado na maneira como configuro esta linha no crontab, mas não consigo ver.

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

Alguém teria alguma ideia sobre isso?

Obrigado !

~ Stéphane

Responder1

O caminho padrão para o cron é:

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

O dateutilitário está localizado, /bin/então você precisará:

  1. adicione explicitamente este diretório ao PATHforcron

    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 datecomando:

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

Prefiro a primeira opção, pois o segundo método torna muito fácil cometer erros e esquecer de fornecer o caminho completo para todos os comandos (como datena sua pergunta).

Responder2

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

Seguindo o /var/log/syslog, descobri que o crontab tem um limite de tamanho de linha! Então, ao ler a linha, foi parar por aí: ... $(date +'fazer a linha “bugar” 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 outras pessoas;)

informação relacionada