#Симптом и границы применимости
В Arch Linux systemd показывает для службы active (running), но её интерфейс, веб-сайт или обработка запросов не работает. При Type=simple systemd не ждёт готовности приложения; состояние процесса не является проверкой доступности сервиса.
#Возможные причины и признаки
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Процесс жив, но не слушает нужный портПриложение ещё инициализируется, не смогло открыть socket или слушает другой адрес. | active есть, в ss отсутствует нужный LISTEN. | Исправить bind/порт по журналу приложения. |
| Отказ зависимостиПриложение запустилось, но не видит БД, брокер сообщений, DNS или том с данными. | В логе connection refused, timeout или unable to resolve. | Проверить внешнюю зависимость отдельно, не перезапускать всё подряд. |
| Ограничения модели готовности службыType=simple не гарантирует, что HTTP или другая функция готовы обслуживать запросы. | Status=active сразу после fork/exec, но health endpoint отвечает ошибкой. | Настроить проверку готовности на уровне приложения или поддерживаемый Type=notify. |
#Подробная диагностика и безопасные действия
- 1. Подтвердите статус и тип службыОткройте терминал. Подставьте имя реального юнита; команды показывают ActiveState, SubState, Type и MainPID. Успешный
systemctl is-activeозначает состояние менеджера, а не успешный ответ приложения.Linux · Терминал (Bash)КомандаДиагностическая команда в терминале Arch Linux, без изменения настроек.systemctl status ИМЯ.service --no-pagersystemctl show ИМЯ.service -p ActiveState -p SubState -p Type -p MainPID
- 2. Найдите реальные сообщения приложенияПрочитайте журнал текущей загрузки и посмотрите ошибки после момента запуска. Сообщения DB connection refused, permission denied или cannot bind требуют разных действий. Не удаляйте журнал ради «очистки ошибки».
- Диагностическая команда в терминале Arch Linux, без изменения настроекLinux · Терминал (Bash)КомандаДиагностическая команда в терминале Arch Linux, без изменения настроек.
journalctl -b -u ИМЯ.service --no-pager -n 100
- 3. Проверьте, слушает ли нужный портУстановите из документации программы нужный TCP/UDP-порт. Пример 8080 замените на ваш порт;
ss -ltnpпокажет слушающие сокеты и владельцев при наличии прав. Если порта нет, выясняйте причину по журналу, а не по firewall. - Только диагностический вывод: список активных TCP/UDP-сокетов без изменения настроекLinux · Терминал (Bash)КомандаНужен sudoТолько диагностический вывод: список активных TCP/UDP-сокетов без изменения настроек.
sudo ss -ltnpsudo ss -lunp
- 4. Проверьте локальное соединение, отделив сетьЕсли сервис должен отвечать на HTTP на localhost:8080, выполните пример, подставив правильный порт и протокол. Код 200/302 может быть нормой, 503 — ошибка приложения, connection refused — соединение не принимается. Не посылайте запросы на неизвестные административные адреса.
- Диагностическая команда в терминале Arch Linux, без изменения настроекLinux · Терминал (Bash)КомандаДиагностическая команда в терминале Arch Linux, без изменения настроек.
curl -I --max-time 5 http://127.0.0.1:8080/
- 5. Сопоставьте bind-address и интерфейсыЕсли локальный запрос проходит, но с другого узла нет, найдите фактический адрес прослушивания и маршруты. Привязка к 127.0.0.1 запрещает внешний доступ; раскрывать сервис на 0.0.0.0 без проверки firewall и аутентификации опасно.
- Только просмотр сетевых адресов; не открывайте внешние порты автоматическиLinux · Терминал (Bash)КомандаНужен sudoТолько просмотр сетевых адресов; не открывайте внешние порты автоматически.
ip -br addresssudo ss -ltnp
- 6. Проверьте зависимую службу конкретно по ошибкеЕсли журнал сообщает о недоступной БД или сокете, найдите именно названную зависимость, проверьте её статус и доступность. Ошибка DNS может иметь собственную причину. Не перезапускайте SSH, firewall и сетевой менеджер одновременно.
- Диагностическая команда в терминале Arch Linux, без изменения настроекLinux · Терминал (Bash)КомандаДиагностическая команда в терминале Arch Linux, без изменения настроек.
systemctl list-dependencies ИМЯ.service --no-pagersystemctl --failed --no-pager
- Диагностическая команда в терминале Arch Linux, без изменения настроекLinux · Терминал (Bash)КомандаДиагностическая команда в терминале Arch Linux, без изменения настроек.
systemctl is-active ИМЯ.servicecurl -I --max-time 5 http://127.0.0.1:8080/journalctl -b -u ИМЯ.service --no-pager -n 40 - 7. Проверьте результат на прикладном уровнеПосле адресного исправления повторите локальную команду и реальную операцию пользователя (например, открытие собственной страницы входа или тестового API), сопоставьте статус с журналом. Если приложение не готово, но unit active, рассмотрите поддерживаемую приложением readiness/Type=notify, не вписывая Type=notify в unit без поддержки протокола.
#Как понять, что проблема устранена
Повторите исходное действие, из-за которого возникла неисправность, и сверяйте не только код завершения команды, но и прикладной результат. Сохраните вывод последней диагностической команды и записи журнала до и после исправления. Если ошибка повторяется, верните только изменённую настройку из резервной копии и передайте специалисту точный симптом, имя программы/службы, версию системы и необходимые фрагменты журнала без паролей и закрытых ключей.
#Что делать, если не помогло
Не применяйте случайные советы для другого дистрибутива: в Arch Linux особенно опасны частичные обновления пакетов, а в Rocky Linux — отключение SELinux или неконтролируемый перезапуск системных служб. Остановитесь после неуспешного безопасного шага, зафиксируйте фактическое сообщение и вернитесь к соответствующей причине. Для загрузки, разделов диска и единственного удалённого подключения используйте резервную копию и локальную консоль.