Os scripts executados no cron não possuem o mesmo ambiente de quando você o executa a partir da linha de comando.
Isso pode ser porque o PATH definido no cron não inclui o diretório em que mysql
e mysqldump
estão localizados.
Ou use o caminho completo ao fazer referência a esses comandos no seu script, como /usr/bin/mysql
ou crie uma nova variável PATH no início do seu script:
export PATH=/bin:/usr/bin
Ou apontando para qualquer outro diretório onde mysql e mysqldump estejam instalados se você não instalou o MySQL usando o pacote padrão do Ubuntu.
Para manter as possíveis mensagens de erro que seriam produzidas quando o script é executado a partir do cron, se você não receber um e-mail localmente, você pode simplesmente adicionar o redirecionamento de saída à sua definição de crontab da seguinte forma:
@reboot /usr/bin/db.backup.sh >/tmp/db-backup.log 2>&1
Qualquer mensagem, informação e erro serão encontrados posteriormente em /tmp/db-backup.log
.
Considere o uso de '> >' em vez de '>' na linha acima, se você quiser acrescentar as informações e não sobrescrever o arquivo de log a cada execução.
Atualização: se o cron job for executado antes do servidor MySQL ser ativado
Se o script for executado no processo de inicialização da máquina, antes que o servidor MySQL esteja ativo, você poderá implementar uma pequena verificação no início do script para aguardar que o arquivo de soquete do MySQL esteja presente:
while [ ! -e /var/run/mysqld/mysqld.sock]; do
# if the file doesn't exist, will loop
do
Atenção : se o MySQL nunca aparecer por algum motivo, o script fará um loop para sempre.