Не удалось отправить SMS через Gammu - PullRequest
0 голосов
/ 29 мая 2020

Как видите, у меня проблема с Гамму. Я использую Gammu для отправки SMS вместе с PRTG Network Monitor, который используется для мониторинга сетевых устройств (например, серверов, коммутаторов, маршрутизаторов, межсетевых экранов), и всякий раз, когда одна из важных служб выходит из строя, PRTG выполняет некоторые созданные мной пакетные файлы, которые выполняют вызовы Gammu для отправки SMS.

Но всякий раз, когда одна или несколько служб перестают работать, некоторые из пакетных файлов вообще не запускаются, и я получаю следующую ошибку:

Ошибка 102 Ошибка открытия устройства. Неизвестно, занято или нет разрешений.

Я видел много тем, связанных с этой проблемой, но не смог решить свою проблему ни с одним из них.

У меня есть настроил ведение журнала для Gammu, чтобы все регистрировалось, что бы ни происходило. У меня две ошибки, которые появляются в этих журналах:

[Системная ошибка - CreateFile in serial_open, 32, «Процесс не может получить доступ к файлу, потому что он используется другим процессом. "] [Системная ошибка - SetCommState в serial_close, 6,« Дескриптор недействителен ».]

У меня вопрос по первой ошибке« Процесс не может получить доступ к файлу, потому что он используется другим процессом. ". О каком файле идет речь, о Gammu или о моем пакетном файле?

Вот пример того, как я настраиваю свои пакетные файлы:

cd c:\Program Files (x86)\Gammu\bin


Rem User1
gammu sendsms TEXT 0123456789 -text "%*" -report

Rem User2
gammu sendsms TEXT 0123456789 -text "%*" -report

Я попробовал механизм тайм-аута перед выполнением отправки gammu, но это совсем не сработало. У вас, ребята, есть какие-нибудь решения, как заставить выполнение ждать, пока другие процессы не будут завершены, чтобы я не получил это сообщение?

Вот gammuconfig:

[gammu]

device = com4:
connection = at115200
logfile = gammulog
logformat = errors

[gammu1]

device = com3:
connection = at115200
logfile = gammulog
logformat = errors

заранее спасибо.

1 Ответ

0 голосов
/ 08 июня 2020

похоже, что один процесс блокирует всю систему, которая отправляет SMS (используя последовательный порт?)

в этом случае вам нужно переписать ваш скрипт таким образом, чтобы он отправлял эти сообщения не параллельно, но последовательно. Использование очередей - это способ go.

Одна из возможностей - позволить PRTG выполнить пакетный (или python) скрипт, который добавит ваше сообщение в очередь. Другой процесс, который будет запущен в l oop, будет извлекать новые сообщения из очереди и обрабатывать их (отправлять их). Таким образом, вы не сможете казнить Гамму более одного раза за раз. Недостатком этого решения является то, что если у вас много предупреждений, то на их отправку уйдет больше времени, так как Gammu не поддерживает параллельную обработку

Другой вариант - использовать некоторый шлюз inte rnet sms, который позволит вам отправлять несколько SMS одновременно

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...