Запустить скрипт, когда менеджер модема обнаружит модем

Мне нужно запустить скрипт, который создаст соединение, когда менеджер модема обнаружит модем (т.е. mmcli -L списки модема). В настоящее время для этого настроено правило udev, но mmcli регистрация модема занимает так много времени, что скрипт уже завершил работу.

Я надеюсь, что есть способ сделать одну из следующих вещей:

  1. Задержка запуска скрипта из udev
  2. Разрешить выполнение сценария в фоновом режиме или идти спать, пока mmcli видит модем (я пытался заставить это работать, но вызывает sleep функция пропущена, и она не позволит мне работать в другом потоке)
  3. Запускать скрипт автоматически при 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: Удобно запланировать команду для запуска позже?

Другие вопросы по тегам