저는 pppd
.
연결은 99,999% 동안 잘 작동하지만 때로는 연결이 끊어지고 모뎀을 물리적으로 다시 연결하지 않으면 추가 재연결 시도가 실패합니다.
프로덕션 박스는 원격으로 작동하고 물리적으로 접근할 수 없기 때문에 어떻게든 관리해야 합니다.
내 생각은 시스템 시작 시 별도의 스레드에서 일종의 스크립트를 실행하는 것입니다. 아래 의사코드를 참조하세요.
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
종료 코드를 어떻게 얻을 수 있나요 ?- 다른 방법(어떤 방법)을 사용해야 합니까?
답변1
"pppd"를 호출한 후에는 "$?" 변수의 값을 가져와야 합니다.
$?
- 마지막 프로그램의 종료 코드를 가져옵니다.
백그라운드 프로세스 '$!'에 일부 덮개를 추가하는 것이 유용할 수 있습니다.
$!
- 마지막으로 실행된 백그라운드 프로세스의 PID를 가져옵니다.
예시 시나리오:
run_background_process &
pid_of_background_process=$!
wait $pid_of_background_process
echo "Result code of background process: "$?
답변2
빙고!
pppd에 대한 명령줄 인수로 "nodetach"를 사용하면 데몬이 자체적으로 포크되지 않습니다. 그러면 필요한 것은 스크립트의 다음 줄에 있는 표준 "echo $?"입니다.
pppd call my_provider nodetach maxfail 3
echo $?