Script Bash não executado a partir do crontab [duplicado]

17

Eu tenho o seguinte script:

#!/bin/bash
mysqldump -u ******** -p********  --all-databases | gzip > /home/srvlinux01/MySQLBackups/database_$(date +\%Y-\%m-\%d).sql.gz

, que está localizado em /home/srvlinux01/MySQLBackups/ as backup.sh com as seguintes permissões

-rwxr--r-- 1 root       root           134 feb 27 12:48 backup.sh

Eu configurei um cronjob em sudo crontab -e para executá-lo todos os dias, à noite

#Automatic MySQL backup
30 3 * * * sh /home/srvlinux01/MySQLBackups/backup.sh

Mas recebo o seguinte erro por e-mail:

sh: 0: Can't open /home/srvlinux01/MySQLBackups/backup.sh

Eu tenho tentado configurações diferentes, mas não consigo descobrir o que está errado. Eu posso executar o script manualmente e tudo corre perfeitamente, então eu acho que há algo errado com a minha entrada do cronjob, mas não consigo realmente entender o que. Você poderia me ajudar a descobrir? Obrigado!

    
por Mateusz Kapusta 06.03.2013 / 09:14

4 respostas

14

Você precisa dar ao seu cron um PATH . Por exemplo:

SHELL=/bin/sh PATH=/bin:/sbin:/usr/bin:/usr/sbin 

No seu caso, tente colocar isso antes do seu comando. Verifique o wiki da comunidade em esta questão para mais informações sobre por que o PATH variável é necessária. Aqui está um trecho; essencialmente a idéia é que o cron não lê /etc/environment :

  

Uma "pegadinha" comum é a variável de ambiente PATH sendo diferente. Talvez seu script do cron use o comando somecommand encontrado em /opt/someApp/bin , que você adicionou a PATH in /etc/environment ? O cron não lê esse arquivo, então executar somecommand do seu script irá falhar quando executado com o cron, mas funcionará quando executado em um terminal. Para contornar isso, basta definir sua própria variável PATH na parte superior do script.

    
por don.joey 06.03.2013 / 10:54
8

Eu posso ver um erro na sua configuração de arquivo crontab. Na configuração abaixo, você está tentando chamar backup.sh da mesma forma que no prompt do shell com o prefixo sh , que pode não funcionar no cron.

#Automatic MySQL backup
30 3 * * * sh /home/srvlinux01/MySQLBackups/backup.sh
Solução:
  1. altere o proprietário como indicado no comentário, se necessário.
  2. Torne-o executável.
    chmod a+x <filename>
  3. Atualize seu crontab para refletir isso. (chamando o arquivo diretamente, o shell é usado de acordo com a linha shebang dentro do arquivo)

    #Automatic MySQL backup
    30 3 * * * /home/srvlinux01/MySQLBackups/backup.sh
    

Espero que isso ajude.

    
por Naha 06.03.2013 / 11:30
7
chmod +x /home/srvlinux01/MySQLBackups/backup.sh             

tente executar seu script com o caminho completo na linha de comando:

/home/srvlinux01/MySQLBackups/backup.sh

se não estiver em execução - há algo errado (erro de caminho)

Certifique-se de que este é o seu crontab

crontab -e 

não sudo:

sudo crontab -e

é root crontab - e root não é capaz de encontrar seu script;)

remova "sh" no crontab apenas escreva:

30 3 * * * /home/srvlinux01/MySQLBackups/backup.sh
    
por toe 06.03.2013 / 16:15
-5

Você esqueceu o ponto '.' antes do caminho de execução.

30 3 * * * sh ./home/srvlinux01/MySQLBackups/backup.sh             
              ^
    
por OrangeTux 06.03.2013 / 09:19