我需要运行一个脚本,当调制解调器管理器检测到调制解调器时,它将创建一个连接。mmcli -L列出调制解调器)。我目前已经设置了一个udev规则来完成这个任务,但是mmcli需要花费很长时间来注册调制解调器,以至于脚本已经完成了运行。
我希望有一种方法来做以下事情之一:
mmcli看到调制解调器(我一直试图让它正常工作,但跳过对sleep函数的调用,它将不允许我在另一个线程中运行)mmcli识别调制解调器时自动运行脚本下面是我最近一次尝试的片段:
sleep 10
count=0
while [ count < 300 ]
do
index=$(mmcli -L | grep Modem | head -n1 | awk '{print $1;}')
let "count+=1"
done
port=$(mmcli -m $index | grep 'primary port' | grep -oP 'ttyACM[0-9]')
connection=$(nmcli c show | grep "modem${port: -1}")
# check if connection does not exist
if [ ! $connection ]; then
echo 'adding new connection at ' date >> /home/nvidia/runlog.txt
nmcli c add type gsm ifname "${port}" con-name "modem${port: -1}" apn testers.apn.com
fi
nmcli c up "modem${port: -1}"发布于 2019-04-24 14:57:54
我想通了。
Udev用于短期任务,减慢脚本会阻止系统的其他部分识别已插入的调制解调器。根据udev手册
将程序添加到要为特定设备执行的程序列表中。这只能用于非常短的运行任务。长时间运行事件进程可能会阻塞此设备或依赖设备的所有进一步事件。长时间运行的任务需要立即脱离事件进程本身。如果指定了RUN{fail_event_on_error}选项,并且执行的程序返回非零,则该事件将被标记为失败,以便以后可能进行处理。
只是分离进程是不起作用的,相反,我能够使用at。有关如何使用at:方便地安排一个命令稍后运行?的示例,请参阅此答案
https://askubuntu.com/questions/1136490
复制相似问题