Enviando email de um script que é executado pelo Crontab [duplicado]

1
#!/BIN/BASH
# To alert whenever lsof crosses 80%

maxlimit=32000
echo 'Max limit is ' $maxlimit
tlimit=$(bc <<< $maxlimit*0.8)
echo 'Treshold limit at 80% ' $tlimit
a=$(lsof | wc -l)
echo 'Current usage ' $a
if [ $(bc <<< "$a > $tlimit") -eq 1 ]
then
        echo 'lsof =' $a 'has exceeded 80% of maximum limit' | /usr/bin/Mail -s "ALERT!!!" "*****@cisco.com"
fi
* * * * * bash /root/vasanth/lsef/script.sh

No script acima, a saída é enviar um e-mail para o ID de correspondência correspondente.

Quando eu o executo manualmente, ele envia o e-mail.

Mas, quando está agendado no cron, o e-mail não está sendo enviado.

Eu não consigo entender qual é o problema. Como eu poderia depurar isso?

    
por Vasanth 08.09.2017 / 14:39

2 respostas

1

O principal problema com tarefas cron similares é que você não pode depurá-las facilmente.

Normalmente, as tarefas do cron devem funcionar silenciosamente se não houver erro , mas devem ser muito detalhadas no caso de qualquer erro.

Estendendo a resposta do EgorVasilev, você pode facilmente ativar um "modo de depuração" em um script de script bash pelo

#!/bin/bash -x
exec 2>>/var/log/cron.log
comandos

. O primeiro interpreta seu script pelo -x flag, o que significa, você irá obter todos os comandos executados no stderr.

E exec 2>>/var/log/cron.log é um comando que não executa nada , em vez disso, ele redireciona o erro padrão para um arquivo de log, no modo de anexação. Essencialmente, o interpretador de shell "executa novamente" com os redirecionamentos fornecidos, sem alterar o contexto de execução do script .

    
por 08.09.2017 / 17:18
1

1. Primeiro: use #!/bin/bash em vez de #!/BIN/BASH

Com #!/BIN/BASH se você executar um script como este:

bash script.sh

.. tudo funciona bem.

Mas se você executar:

./script.sh

.. você recebe um erro:

-bash: ./script.sh: /BIN/BASH: bad interpreter: No such file or directory

2. Execute este comando:

echo 'PATH='$PATH

adiciona saída ao início do script.

Exemplo :

# echo 'PATH='$PATH
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
    
por 08.09.2017 / 15:27

Tags