linux-labs

← Практика

Порт уже занят

Сломай-почини · Среднее · 20 мин · 150 баллов

Порт уже занят

Веб-служба app не может запуститься: при старте пишет bind: address already in use — её TCP-порт 8080 уже занят другим процессом.

Задача

Сделай так, чтобы:

  1. порт 8080 слушала именно служба app, а не посторонний процесс;
  2. конфликтующий процесс был корректно остановлен (а не порт у app переназначен на другой);
  3. служба app была активна и отвечала на http://localhost:8080/.

Подсказки по подходу

  • Кто слушает порт: sudo ss -ltnp | grep :8080 — покажет PID и имя процесса.
  • Что это за процесс: ps -fp <PID>; если он принадлежит службе, её юнит покажет systemctl status <PID>.
  • Останавливай аккуратно: службу — через systemctl stop, одиночный процесс — kill.
  • Проверяй результат по кнопке «Проверить».

Всё нужное уже установлено. Интернет на машине отсутствует — и не понадобится.

Подсказки

Подсказка 1

Узнай, кто держит порт: sudo ss -ltnp | grep :8080. В колонке users: будет имя процесса и его PID.

Подсказка 2

Разберись, что это за процесс: ps -fp <PID>. Если он принадлежит службе, systemctl status <PID> покажет её юнит. Цель — освободить порт, остановив именно этого «захватчика», а не меняя порт у app.

Подсказка 3

Останови конфликтующий процесс правильно: службу — sudo systemctl stop <unit> (и при необходимости disable), одиночный процесс — sudo kill <PID>. Затем подними нужную службу sudo systemctl restart app и проверь ss -ltnp | grep :8080 и curl -I http://localhost:8080/.

Поднимет вашу личную эфемерную Linux-ВМ для задания — обычно пара секунд. После работы её можно остановить.