hostprofi.ru
Подобрать хостинг
Термин·буква С

Сервис (service)

краткое определение

Фоновый процесс (демон) Linux, запускаемый автоматически. Управляется через systemd и команду systemctl.

Сервис (Service) в Linux — фоновый процесс (демон), который запускается автоматически при загрузке системы и продолжает работу без участия пользователя. Веб-сервер Nginx, база данных MySQL, планировщик задач Cron — всё это системные сервисы. В современных Linux-системах сервисами управляет systemd.

Как работает управление сервисами

Основные команды управления через systemctl:

# Запустить сервис
systemctl start nginx
# Остановить
systemctl stop nginx
# Перезапустить
systemctl restart nginx
# Перечитать конфиг без рестарта
systemctl reload nginx
# Включить автозапуск
systemctl enable nginx
# Статус сервиса
systemctl status nginx

Вывод systemctl status показывает: состояние (active/inactive/failed), PID главного процесса, время последнего запуска, последние строки журнала. Это первое место для диагностики при проблемах с сервисом.

Сервисы организованы в targets — группы, аналоги runlevel. multi-user.target — стандартный серверный режим без GUI; graphical.target — с рабочим столом. Команда systemctl list-units --type=service --state=running выводит все запущенные сервисы.

История

До systemd Linux-дистрибутивы использовали SysV init с init-скриптами в /etc/init.d/. Управление было через service nginx start или прямой вызов скрипта. SysV запускал сервисы последовательно, что замедляло загрузку. Systemd революционизировал процесс: параллельный запуск, socket activation, dependency management. Upstart (Ubuntu) был промежуточным решением, вытесненным systemd.

На что обращать внимание

Сервис в состоянии failed означает аварийное завершение. Причину нужно искать в журналах: journalctl -u servicename --since "5 minutes ago". Частые причины: ошибка в конфигурации (проверяется через nginx -t или аналог), нехватка оперативной памяти, занятый порт (ss -tlnp | grep :80).

Для критически важных сервисов настройте Restart=always в unit-файле и мониторинг через систему мониторинга. Алерт при падении сервиса должен приходить раньше, чем об этом узнает пользователь. Grafana с Prometheus node_exporter умеет отслеживать состояние systemd-сервисов через метрику node_systemd_unit_state.

Пользовательские сервисы и автозапуск

Помимо системных сервисов (запускаемых от root), systemd поддерживает пользовательские сервисы: systemctl --user enable myapp.service. Они запускаются от имени конкретного пользователя и хранятся в ~/.config/systemd/user/. Это удобно для разработчиков, запускающих приложения без root-доступа.

Для приложений на Node.js, Python или Go написание unit-файла занимает несколько минут и даёт значительные преимущества перед ручным запуском через nohup &: автоматический перезапуск при падении, интеграция с journald, управление зависимостями. Пример для Node.js-приложения:

[Service]
Environment=NODE_ENV=production
Environment=PORT=3000
ExecStart=/usr/bin/node /var/www/app/server.js
StandardOutput=journal
StandardError=journal

Директива StandardOutput=journal направляет stdout приложения в systemd journal — логи становятся доступны через journalctl -u myapp с фильтрацией по времени, уровню и многими другими параметрами. Для Docker Compose-проектов также создают systemd unit, который запускает/останавливает docker compose up/down — это надёжнее crontab-хаков.

Другие термины