systemd на VPS: сервисы, автозапуск и журналы
Как оформлять сервисы на VPS через systemd: unit-файлы, restart policy, зависимости, journalctl, диагностика падений и перенос на новый сервер.
Содержание
systemd превращает набор команд в управляемый сервис: его можно включить в автозагрузку, перезапускать после сбоя и читать журналы одинаковым способом.
Когда нужен unit
Если процесс должен переживать logout, reboot или падение, запускайте его не через screen, а через systemd. Это относится к API, reverse proxy, VPN-демону, боту и фоновому worker.
Пользователь и доступ
Не запускайте приложение от root без причины. Создайте отдельного пользователя, задайте рабочую директорию и минимальные права на конфиги и ключи SSH.
Порты IPv4/IPv6 и firewall
Unit может быть активен, но порт не открыт. Проверяйте listen-адрес, UFW, security group провайдера и отдельные правила для IPv6.
Restart и зависимости
Для сетевых сервисов обычно нужны After=network-online.target и умеренный Restart=on-failure. Бесконечный быстрый restart скрывает причину падения и забивает журналы.
journalctl и диагностика
Используйте journalctl -u имя.service -n 100 --no-pager и live-режим. Если сервис слушает UDP, в логах часто видны ошибки bind, прав, конфигурации или занятый порт.
Docker и перенос
Контейнеры тоже должны быть описаны воспроизводимо: compose-файл, env, volumes, published ports. При переносе сервера заберите unit, compose, firewall и проверьте репутацию нового IP.
Проверено на практике
- Дата проверки: 2026-05-12
- Среда: Ubuntu/Debian Linux, VPS-провайдеры с публичным IPv4/IPv6
- Версии: актуальная документация Ubuntu/Debian/OpenSSH/systemd/UFW на дату проверки
Мини-чеклист
- Описать сервис unit-файлом
- Запускать от отдельного пользователя
- Проверить bind-адрес и порт
- Настроить Restart без restart-loop
- Проверить journalctl после reboot
Частые ошибки
- Запускать сервис вручную из SSH-сессии
- Давать root без необходимости
- Путать active service с открытым портом
- Игнорировать IPv6-listen
- Не переносить env и volumes
Источники и документация
FAQ
Почему сервис active, но сайт не открывается?
Active означает, что процесс запущен. Отдельно проверьте bind-адрес, порт, firewall и reverse proxy.
Где смотреть ошибки systemd-сервиса?
В journalctl по unit-имени, а также в логах самого приложения, если оно пишет отдельные файлы.
Можно ли запускать Docker через systemd?
Да, но часто удобнее Docker Compose с restart policy и отдельным systemd unit для compose-проекта.
Хотите перейти сразу к рабочему доступу?
Если сценарий уже ясен и не хочется проходить все шаги вручную, оформите доступ и проверьте подключение на своем устройстве.
Оформить доступ