После перехода на Linux/PostgreSQL возникла проблема с опросом приборов по GSM/CSD.
Система выдает сообщение “Ошибка опроса. Истек таймаут на установку соединения.”
Ошибка из интерфейса ЛЭРС:
Лог:
tail -f /var/LERS/Logs/PollService/dump.mc35i.2023-06-18.log
2023-06-18 04:39:30.3122 ---- Порт открыт
2023-06-18 04:39:30.3137 >> ATZ
2023-06-18 04:39:30.3875 <<
OK
2023-06-18 04:39:30.3896 >> ATD89640847763
2023-06-18 04:40:05.3945 <<
CONNECT 9600/RLP
2023-06-18 04:40:06.0143 ---- Порт закрыт
Система Debian 11.7, Docker 24.0.2, ЛЭРС 3.51.3, COM порт в сервере без переходников. Модем Siemens MC35i.
Запустил в контейнере отладку процесса опроса командой strace -f -p номер_процесса_службы_опроса -t -o /trace.log.
Заметил, что коннект в лог файле отображается позже, чем он реально произошел (в трассировке в 11:39:49, а в логе отобразилось только после таймаута 35 сек. в 04:40:05, разница в часах из-за таймзоны в логе). То есть, CONNECT был до истечения таймаута. Также прилагаю видео, где видно задержку в логе.
Видео отладки:
Трассировка с помощью strace:
root@d04ce181e884:/# tail -f /trace.log | grep CONNE
14584 11:39:49 <… read resumed>“\r\nCONNEC”, 8) = 8
в логе при этом сообщение отобразилось позже (ровно в момент завершения таймаута, часовой пояс только неверный в логе):
2023-06-18 04:40:05.3945 <<
CONNECT 9600/RLP
Перехват strace и данные лога:
То есть CONNECT был до истечения timeout, но служба опроса или не увидела его или не нашла в БД, какой запрос послать. Еще заметил, что нет последей буквы “T” в ответе “\r\nCONNEC”. Но это вроде нормально.
Такую же проблему описывали в теме Проблемы с опросом приборов после миграции на Postgres - #6 от пользователя slavniy и там как я понял только базу перенесли на Postgres, а сам сервер остался под Windows и не переставлялся (в логе также коннект после таймаута и дальше закрытие порта). Поэтому думаю, может при переносе БД, например, не скопировались данные по моделям приборов учета или еще что-то (я как пользователь с ЛЭРС мало работаю, не знаю предметную область учета).
Пробовал на разных серверах: первый запуск был на виртуальной машине KVM и с использованием переходника USB->COM ,думал проблема в чем-то из этой более сложной схемы и перешел на bare metal сервер без виртуалок и без COM-переходников, этот вариант и описал в теме.
Что можно еще проверить? В чем может быть проблема?





