Cron jobs monitoring usando o código de saída

1

Eu quero monitorar tarefas agendadas usando o script de shell. Mas se eu usar variável conter código de saída do último comando eu tenho "0" sempre. Eu acho que é porque eu executo este script após o trabalho cron e "código de saída" leva o valor "0" (script de início) Como posso ignorar o início do script e usar a variável "código de saída" do trabalho cron anterior?

$ ls foo ; echo $?
ls: cannot access foo: No such file or directory
2
$ ls foo
ls: cannot access foo: No such file or directory
$ sh test.sh 
0

Meu teste.sh:

#!/bin/bash

notify() {
EXIT_CODE=$?
echo ${EXIT_CODE}
}
notify
    
por Pasily_V 06.06.2018 / 13:49

2 respostas

1

O status de saída de um comando não é algo armazenado globalmente no sistema; é mantido localmente pelo shell que executou o comando. Assim que o shell executa outro comando, o status de saída anterior é perdido.

O shell sai com o status do último comando; portanto, se o último comando em um script de shell falhar, o status de saída do shell também será diferente de zero.

Eu não sei como você estava pensando que o status de saída que foi o resultado de um cron job poderia ser determinado em alguma outra sessão ou script de shell aleatório; E se houvesse 20 trabalhos em execução paralelamente, você descobrirá qual status de saída pertence a qual trabalho? Não pode ser feito.

Você precisa corrigir a tarefa cron para salvar seu status de saída em algum arquivo de status; então você pode ler esse arquivo de status mais tarde.

    
por 06.06.2018 / 13:57
0

Você pode passar o código de saída como um parâmetro para seu script:

ls -l /tmp/filethatdoesnotex.ist
/usr/local/bin/test.sh $?

com test.sh:

RESULT=$1
if [ $RESULT -gt 0 ]
then
   echo "something bad happened and ended with result $RESULT" >&2
else
   echo "everything is fine, sleep on"
fi
    
por 06.06.2018 / 14:00