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

Я должен запустить скрипт, который создаст соединение, когда менеджер по модему обнаружит модем (т.е. 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
задан 24 April 2019 в 00:37

1 ответ

Я понял это.

Udev предназначен для коротких задач, замедление работы скрипта не позволило остальной системе распознать, что модем подключен. Согласно руководству udev

Добавить программу в список программы, выполняемые для конкретного устройства. Это можно использовать только для очень коротких задач. Выполнение обработки события в течение длительного периода времени может заблокировать все дальнейшие события для этого или зависимого устройства. Долгосрочные задачи должны быть немедленно отсоединены от самого процесса события. Если указана опция RUN {fail_event_on_error}, и исполняемая программа возвращает ненулевое значение, событие будет помечено как сбойное для возможной последующей обработки.

Просто отсоединение процесса не работает, вместо этого я смог использовать at. Посмотрите этот ответ для примеров того, как использовать at: Удобно запланировать команду для запуска позже?

0
ответ дан 24 April 2019 в 00:37

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

Похожие вопросы: