Por que meu script do cron para despejar um banco de dados MySQL não é executado?

3

Eu tenho o seguinte trabalho cron :

* * * * * /home/db_backups/test.sh

que corre bem e é executado a cada minuto. Se eu verificar com sudo grep \(CRON\) /var/log/syslog , obtenho o seguinte:

Jun 23 11:30:01 analytics CRON[9301]: (CRON) info (No MTA installed, discarding output)

No entanto, se eu alterar o arquivo executável para inreadobase_backup.sh :

* * * * * /home/db_backups/inreadobase_backup.sh

o script não é executado - não consigo ver registros no log. O arquivo executável, se executado por si só, faz o trabalho sem erros. Aqui está o conteúdo do arquivo:

sudo mysqldump -h example.com -u username -ppassword dbname | gzip > db.zip

Ambos os arquivos executáveis têm permissões de execução dadas a todos. Onde devo olhar para identificar o problema?

EDITAR

O trabalho é executado e cria backups com êxito se eu adicionar a sudo crontab -e a seguinte linha:

*/5 * * * * mysqldump -h example.com -u username -ppassword dbname | gzip > db.zip

No entanto, se eu mover o arquivo da linha de execução mysqldump... db.zip para inreadobase_backup.sh e especificá-lo para o trabalho:

*/5 * * * * /home/db_backups/inreadobase_backup.sh

o trabalho não cria backups. Eu não sei como verificar se ele é executado e qual erro ele gera, se houver. Se eu simplesmente executar /home/db_backups/inreadobase_backup.sh na linha de comando, o backup será criado. E a única linha que o arquivo contém é esta:

mysqldump -h example.com -u username -ppassword dbname | gzip > db.zip
    
por AngularInDepth.com 23.06.2014 / 17:39

1 resposta

7

Suponho que você tenha adicionado isso como um crontab de seu próprio usuário. O problema é que cron não tem como se autenticar em sudo , então ele não pode executar seu comando. A maneira mais simples é adicionar o crontab à conta de root :

sudo crontab -e

Em seguida, adicione esta linha:

* * * * * mysqldump -h example.com -u username -ppassword dbname | gzip > db.zip

Não há necessidade de um script para algo tão simples, então você pode adicionar o próprio comando. De qualquer maneira, você não quer usar sudo com isso.

Em resposta à sua edição:

Para descartar várias possíveis complicações, faça com que inreadobase_backup.sh seja assim:

#!/bin/sh
/usr/bin/mysqldump -h example.com -u username -ppassword dbname | /bin/gzip > /home/maximus/db.zip 

Em seguida, para capturar qualquer erro, redirecione a saída de erro do script para um arquivo adicionando 2> file à sua cron line:

*/5 * * * * /home/db_backups/inreadobase_backup.sh 2> /tmp/cron.error

Você pode verificar /tmp/cron.error para mais detalhes.

    
por terdon 23.06.2014 / 17:46

Tags