O script é executado manualmente, mas não do cron

3

Conforme o monitoramento do meu status de replicação do mysql. Eu escrevi um script de shell simples com o seguinte código

#!/bin/bash
date > /tmp/mysql_repl_status.txt
cd /usr/bin/
"/usr/bin/mysql" "-e" "SHOW SLAVE STATUS \G" >> /tmp/mysql_repl_status.txt
mail -s "Netspective MySQL replication status" [email protected] < /tmp/mysql_repl_status.txt

O problema é quando eu executo este script manualmente ele funciona bem, mas usando cron o script não funciona.

Usando o cron, recebi o e-mail apenas com o comando output of date. O que há de errado com o meu lado?

    
por Roni Baby 19.06.2014 / 14:34

3 respostas

5

Várias possibilidades:

  1. O Cron não passa um ambiente de usuário completo para os scripts executados no cron. Então, vars como $ PATH podem ser diferentes em execução no cron do que em um terminal de usuário.

  2. Cron requer uma nova linha no final de cada linha, portanto, mantenha sempre uma linha em branco no final do arquivo crontab.

Talvez especifique os caminhos completos no script e veja se isso funciona para começar.

#!/bin/bash
statfile=/tmp/mysql_repl_status.txt
/bin/date > $statfile
cd /usr/bin
/usr/bin/mysql -e "SHOW SLAVE STATUS \G" >> $statfile
/bin/mail -s "Netspective MySQL Replication Status" [email protected] < $statfile
    
por 19.06.2014 / 15:38
1

As tarefas Cron são executadas com muito pouco contexto. Se você tiver um arquivo .my.cnf em seu diretório inicial, isso pode conter os detalhes de autenticação necessários para que o comando mysql funcione. Você provavelmente também precisa do caminho completo para mail - veja o que which mail imprime.

    
por 19.06.2014 / 15:55
1

Em vez de escrever o caminho completo para cada comando, seria útil definir a variável PATH no próprio arquivo de script

#!/bin/bash
export PATH=/usr/local/sbin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
date > /tmp/mysql_repl_status.txt
cd /usr/bin/
"/usr/bin/mysql" "-e" "SHOW SLAVE STATUS \G" >> /tmp/mysql_repl_status.txt
mail -s "Netspective MySQL replication status" [email protected] < 
/tmp/mysql_repl_status.txt'
    
por 17.06.2017 / 12:54

Tags