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