Запустить скрипт, когда менеджер модема обнаружит модем
Мне нужно запустить скрипт, который создаст соединение, когда менеджер модема обнаружит модем (т.е. mmcli -L
списки модема). В настоящее время для этого настроено правило udev, но mmcli
регистрация модема занимает так много времени, что скрипт уже завершил работу.
Я надеюсь, что есть способ сделать одну из следующих вещей:
- Задержка запуска скрипта из udev
- Разрешить выполнение сценария в фоновом режиме или идти спать, пока
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}"
1 ответ
Я понял.
Udev предназначен для коротких задач, замедление работы скрипта не позволило остальной системе распознать, что модем подключен. Согласно руководству udev
Добавьте программу в список программ, которые будут выполняться для определенного устройства. Это можно использовать только для очень коротких задач. Выполнение обработки события в течение длительного периода времени может заблокировать все дальнейшие события для этого или зависимого устройства. Долгосрочные задачи должны быть немедленно отсоединены от самого процесса события. Если указана опция RUN{fail_event_on_error} и исполняемая программа возвращает ненулевое значение, событие будет помечено как сбойное для возможной последующей обработки.
Просто отключение процесса не работает, вместо этого я смог использовать at
, Посмотрите этот ответ для примеров того, как использовать at
: Удобно запланировать команду для запуска позже?