Практическое задание

Эта задача — шаг 16 курса «Процессы и сигналы»

Старый экземпляр не отдал порт

средне~10 мин

Выкатили новую версию API, но она не поднимается: порт 80 до сих пор держит старый экземпляр, который забыли остановить. Найди процесс на этом порту, заверши его и запусти новую версию из /opt/api/run.sh в фоне так, чтобы она пережила закрытие терминала. Готово, когда http://localhost:80/ отвечает API v2. Вкладка «Сайт» над терминалом показывает, кто сейчас отвечает на порту 80: пока там API v1.

Что потренируешь:
  • ss -p
  • поиск процесса по порту
  • kill
  • фоновый запуск
  • setsid

Разбор темы

Порт в состоянии LISTEN принадлежит одному сокету, и пока его держит старый процесс, новый получит Address already in use. Узнать держателя помогает ss с показом процессов: рядом с адресом стоит имя и pid=…. Дальше — сигнал: сначала SIGTERM, чтобы процесс завершился штатно, и только если он не реагирует — SIGKILL. Новую версию запускают отвязанной от терминала (setsid или nohup с перенаправлением ввода-вывода), иначе она умрёт вместе с сессией, из которой её запустили.

Что проверяется

  1. на 80 отвечает новая версия
  2. старый экземпляр остановлен

Как это выглядит