首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当调制解调器管理器检测到调制解调器时运行脚本

当调制解调器管理器检测到调制解调器时运行脚本
EN

Ask Ubuntu用户
提问于 2019-04-23 19:48:47
回答 1查看 1K关注 0票数 2

我需要运行一个脚本,当调制解调器管理器检测到调制解调器时,它将创建一个连接。mmcli -L列出调制解调器)。我目前已经设置了一个udev规则来完成这个任务,但是mmcli需要花费很长时间来注册调制解调器,以至于脚本已经完成了运行。

我希望有一种方法来做以下事情之一:

  1. 从udev延迟脚本的开始
  2. 允许脚本在后台运行或进入休眠状态,直到mmcli看到调制解调器(我一直试图让它正常工作,但跳过对sleep函数的调用,它将不允许我在另一个线程中运行)
  3. mmcli识别调制解调器时自动运行脚本

下面是我最近一次尝试的片段:

代码语言:javascript
复制
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}"
EN

回答 1

Ask Ubuntu用户

发布于 2019-04-24 14:57:54

我想通了。

Udev用于短期任务,减慢脚本会阻止系统的其他部分识别已插入的调制解调器。根据udev手册

将程序添加到要为特定设备执行的程序列表中。这只能用于非常短的运行任务。长时间运行事件进程可能会阻塞此设备或依赖设备的所有进一步事件。长时间运行的任务需要立即脱离事件进程本身。如果指定了RUN{fail_event_on_error}选项,并且执行的程序返回非零,则该事件将被标记为失败,以便以后可能进行处理。

只是分离进程是不起作用的,相反,我能够使用at。有关如何使用at方便地安排一个命令稍后运行?的示例,请参阅此答案

票数 2
EN
页面原文内容由Ask Ubuntu提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://askubuntu.com/questions/1136490

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档