Проблема сокета на Debian 9 - Как использовать скрипт bash для проверки

99
10

У меня есть служба на Debian 9. У меня также есть bash restarter, поэтому, если служба неожиданно отключится, он снова запустится.

Первоначальный репозиторий в основном делает:

if (this service is not running); then
run service
fi

Проблема заключается в том, что иногда, после того, как служба неожиданно отключилась, он снова запускается, но я получаю сообщение об ошибке:

не удалось привязать приемник сокетов

Служба работает, но не работает.

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

спросил(а) 2018-09-05T11:13:00+03:00 2 года, 1 месяц назад
1
Решение
90

Вероятно, ваша проблема связана с подключением в TIME_WAIT (см., Например, здесь).

Вы можете избежать этой проблемы, используя SO_REUSEADDR в приложении.

Если вы не можете изменить приложение, вам нужно будет проверить это условие в стартовом запуске и запуске службы, пока соединение TIME_WAIT исчезнет.

Эта проверка может быть выполнена путем анализа вывода netstat, например:

while netstat -n | egrep ':5678.*:.*TIME_WAIT' >/dev/null ; do sleep 0.1 ; done

Где 5678 - номер вашего сервисного порта.

Удачи!

РЕДАКТИРОВАТЬ> фрагмент Restarter с проверкой:

pidof service >/dev/null
PID1=$?
if [ $PID1 -eq 1 ] ; then
while netstat -n | egrep ':5678.*:.*TIME_WAIT' >/dev/null ; do sleep 1 ; done
screen -A -dmS service1 gdb --batch -x /home/server/crashreport.gdb /home/server/bin/service
fi

Обратите внимание, что возможна более короткая форма:

if ! pidof service >/dev/null ; then
while netstat -n | egrep ':5678.*:.*TIME_WAIT' >/dev/null ; do sleep 1 ; done
screen -A -dmS service1 gdb --batch -x /home/server/crashreport.gdb /home/server/bin/service
fi

Если ваш резидент выполняет эту проверку в цикле, вы должны предоставить экран и gdb свое время для запуска службы (в противном случае служба может быть запущена два раза, что может привести к аналогичному сообщению об ошибке, как в вашем вопросе...)

ответил(а) 2018-09-16T00:31:00+03:00 2 года, 1 месяц назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема