Не знаю, как это объяснить, поэтому я приведу пример:
ОС: Debian 7,8 / Centos 7
Мы используем supervisord
наблюдать и принудительно запускать трещотка сервер, который прослушивает порт для связи между серверами.
Через cron есть скрипт обновления, который автоматически загружает обновления на храповой сервер.
Для этого Cron Script закрывает скрипт Ratchet через supervisorctl stop ratchet
,
Затем сценарии обновления передают обновленный код и снова запускают храповой сервер с помощью supervisorctl start ratchet
,
В этом процессе храповик закрывает порт и должен запустить его снова, если храповик запущен.
Но иногда порт блокируется, и мы видим, что с этим портом выполняется процесс php, но мы не можем подключиться к этому порту.
Другая странная вещь заключается в том, что сервер Ratchet запускается через php cli, и если порт блокируется после stop
/ start
от supervisorctl
процесс, который держит порт случайным образом php-cli
в apache
а также python
..
Сначала мы подумали, что это связано с использованием динамического порта, но сейчас мы пробовали разные порты, и проблема снова возникает случайным образом.
Еще одна мысль была о том, что supervisorctl stop ratchet
не чистит остановить процесс php (храповик), поэтому мы решили exit()
в самом сервере (что должно вызывать все __destruct()
закрыть порт), что не помогает — та же ошибка, случайным образом порт блокируется / используется.
Кто-нибудь знает, как решить такую проблему — что нужно сделать, чтобы очистить close и открыть порт в debian / centos через php?
Почему возникает эта проблема, и почему порт (который больше не используется) блокируется случайным образом, пока мы не принудительно убьем процесс, который удерживает порт открытым.
Редактировать: Может быть, стоит знать: этот случайный блок также возникает, если мы не используем служебный пакет храповика с основным php socket_create
и прочее..
Задача ещё не решена.
Других решений пока нет …