live555ProxyServer, которая проксирует RTSP-поток. Если кратко - она открывает порт, какой укажешь, и льёт RTSP-трафик всем, кто на этот порт стучится. Я запихнула запуск этой софтины с нужными параметрами в скрипт, а скрипт - в systemd-сервис. И теперь, когда я делаю systemctl restart %servicename%, даже не меняя параметры, нормальный перезапуск происходит примерно в одном случае из трёх. Опытным путём я выяснила, что нормальный перезапуск происходит, если стопнуть сервис, выждать минуту-полторы, и заново его запустить. Как я это понимаю (возможно, я не права), tcp-порт не закрывается сразу после остановки сервиса, он ждёт какие-то недошедшие пакеты, и, когда сервис стартует заново, порт ещё не закрылся, и заново открыться он не может.
А теперь вопросы, их два:
1. Правильно ли я понимаю причину нестабильного поведения сервиса?
2. Что делать? UDP не предлагать. Мне, кроме установки sleep 60 в скрипт запуска, ничего в голову не идёт:(
что-то из этой области? https://blog.kireev.pro/2017/07/%D0%BF%D1%80%D0%BE%D0%B1%D0%BB%D0%B5%D0%BC%D1%8B-%D1%81-%D0%BE%D1%87%D0%B5%D1%80%D0%B5%D0%B4%D1%8C%D1%8E-time_wait/
проблема в этой области где-то, да
ну там и варианты решений внизу есть
в общем, почитала я все решения и пришла к выводу, что правильнее будет всё же попробовать UDP. спасибо за полезную ссылку!
там вроде есть пара вариантов с reuse_tw чтото такое. может их?
если не попрёт с UDP - буду пробовать его
2)В сервисах systemd есть встроенная пауза, если не ошибаюсь, не sleep
тоже полезное знание, спасибо! но для данной задачи паузы - это, скорее, костыль
ну я костыль особый не вижу, а системд вроде бы умеет сокеты контролировать
Обсуждают сегодня