Para depurar isso, você pode colocar
set -e -u
na parte superior de seu script de shell - ele termina com um status de saída de erro quando um comando falha ou uma variável indefinida é usada.
Então você pode chamar do cron-job um script wrapper que chama o script principal como este
sh -x main_script.sh || echo Failed with exit status: $?
Com -x
, cada linha é impressa antes de ser executada. A saída é enviada pelo daemon do cron para você.
Você também pode usar um arquivo temporário quando a saída for muito grande:
sh -x main_script.sh > $TEMPFILE 2>&1
if [ $? -ne 0 ]; then echo Failed with exit status $? - see $TEMPFILE; fi
Caso o status de saída seja > 128
, o comando foi interrompido por um sinal - por exemplo, alguém 'matou' isso, ocorreu uma falha de segmentação ou houve uma situação de falta de memória ( como obter o sinal do status de saída ).