我正在 Raspberry Pi 系统上设计一些报告系统,该系统通过由 控制的 3G USB 调制解调器连接到世界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
答对了!
将“nodetach”作为 pppd 的命令行参数,守护进程将不会分叉自身。那么所需要的就是标准的“echo $?”在脚本的下一行:
pppd call my_provider nodetach maxfail 3
echo $?