Como posso reiniciar um processo apenas se ele falhar, mas não se ele sair normalmente (ou com determinados códigos de retorno)?

1

Estou com um problema estranho provavelmente relacionado à inicialização de hardware. Eu estou trabalhando em um sistema de aquisição automática de dados baseado em Java que roda em um SBC com o Ubuntu 16.04. O programa de aquisição de dados é iniciado através do cron por enquanto, embora eu esteja planejando mudar para o systemd.

Ele inicia e funciona bem se eu reiniciar o sistema. No entanto, se estiver desligado e iniciado a frio (o que é o normal), o programa trava com o erro free(): corrupted unsorted chunks . Se eu começar de novo, parece correr bem. Eu preciso descobrir o porquê e espero, mas isso pode levar algum tempo, e, entretanto, o sistema precisa ser testado ainda mais e eu preciso de uma solução alternativa que irá reiniciá-lo se ele falhar. Apenas adicionando um atraso não ajuda.

O que eu gostaria de fazer é reiniciar o processo Java ou reinicializar o sistema a partir do script bash wrapper, mas apenas se ele falhar. Se ele sair com o código de saída zero (ou, idealmente, com qualquer código do conjunto predeterminado de códigos de saída permitidos), ele não deverá ser reiniciado e o script também deverá sair.

    
por biggvsdiccvs 27.06.2017 / 10:00

1 resposta

3

Se você puder escrever um script Bash, agende esse script em vez de seu programa:

#!/bin/bash
myprogram
while [ $? -ne 0 ]; do
    myprogram
done

Este script irá reiniciar seu programa até sair com um código de erro 0 (indicando sucesso). Além disso, reinicializar todo o sistema parece um pouco exagero para mim.

    
por 27.06.2017 / 10:06