Bingo!
Coloque 'nodetach' como argumento da linha de comando para o pppd e o daemon não se separará. Tudo o que é necessário é o padrão "echo $?" na próxima linha de script:
pppd call my_provider nodetach maxfail 3
echo $?
Estou projetando alguns sistemas de relatórios no sistema Raspberry Pi que se conecta ao mundo através do modem USB controlado por pppd
.
99,999% da conexão de tempo funciona bem, mas às vezes ela cai e outras tentativas de reconexão falham, a menos que o modem seja religado fisicamente.
Como na caixa de produção funcionará remotamente sem acesso físico a ele, então tenho que gerenciá-lo de alguma forma.
Minha idéia é rodar na inicialização do sistema, algum tipo de script em um tópico separado, veja abaixo pseudocódigo:
while(true){
wait_for_modem_device_to_appear
start_pppd # may_be limiting retries not to default 10, but to, say, 3
wait_for_pppd_to_finish
if(exitcode_is_one_of(6,7,8,10,15,16)){
reset_usb_port_programmatically #I have tools for that
}else{
break
}
}
pppd
? Depois de chamar 'pppd', você precisa obter o valor da variável '$?'.
$?
- obter o código de saída do último programa.
Para processos em segundo plano '$!' pode ser útil com alguma cobertura.
$!
- obtém o PID do último processo de segundo plano que foi executado.
Cenário de exemplo:
run_background_process &
pid_of_background_process=$!
wait $pid_of_background_process
echo "Result code of background process: "$?