Служба (service)
Что такое служба, чем она отличается от обычной программы и как ей управлять.
Шпаргалка
8 команд Версия для печати-
systemctl status nginx --no-pagerсостояние службы -
sudo systemctl status nginx+ последние строки журнала -
sudo systemctl start nginxзапустить сейчас -
sudo systemctl stop nginxостановить сейчас -
sudo systemctl restart nginxперезапустить -
sudo systemctl enable nginxвключить автозапуск при загрузке -
sudo systemctl enable --now nginxвключить автозапуск и сразу запустить -
sudo journalctl -u nginx -eжурнал именно этой службы
Обзор
Служба — программа, которая работает в фоне без прямого участия
пользователя и обслуживает какую-то функцию системы или сети: веб-сервер
отвечает на запросы, СУБД хранит данные, sshd принимает подключения. В
отличие от команды, которую ты запускаешь и ждёшь, служба живёт постоянно
(или до следующей перезагрузки) и обычно переживает выход из терминала, в
котором её запустили, — потому что запускает и следит за ней не терминал, а
init-система.
В современных дистрибутивах Linux эту роль играет systemd — первый
процесс системы (PID 1). Служба описывается unit-файлом (.service) и
управляется командой systemctl:
Эта статья — про службу как понятие: что это и как ей управлять на базовом
уровне. Что такое unit-файл, зависимости, цели (targets) и сокет-активация —
в systemd. Полный набор команд systemctl (mask, isolate, edit) — в
systemctl. Журналы служб — в journalctl.
Рецепты
3Запустить, остановить, включить автозапуск
Посмотреть, что писала служба
Неполадки
5Служба «упала», а systemctl status показывает active
Возможно, ты смотришь другую службу или переименованный юнит (алиасы,
.socket вместо .service). Сверь точное имя: systemctl list-units
'*nginx*'.
enable не запустил службу сейчас
enable только ставит автозапуск на будущее (создаёт симлинк). Чтобы
запустить сразу — start отдельно или enable --now одной командой.
Служба перезапускается сама по себе (restart loop)
Значит она падает после старта, а systemd настроен её перезапускать
(Restart= в unit-файле). Причина — в журнале: journalctl -u <служба> -e.
Warning: some journal files were not opened due to insufficient permissions.
Строки журнала в systemctl status видны только с sudo или пользователю из групп
adm и systemd-journal. Без прав status печатает состояние и это
предупреждение. Повтори с sudo — см. systemctl и journalctl.
Не понимаю разницу между «служба», «демон» и «юнит»
Демон — фоновый процесс в общем смысле (термин старше systemd). Юнит
— объект, которым управляет systemd; служба (.service) — самый частый
тип юнита, но есть и другие (.socket, .timer, .mount). Служба почти
всегда запускает демон.
См. также
- systemd — Init-система и менеджер служб — юниты, цели, сокеты, таймеры.
- systemctl — Управление службами systemd — start/stop/restart/status/enable/reload.
- journalctl — Чтение журнала systemd (journald) — фильтры по службе, времени, приоритету.
Есть неточность? Сообщить об ошибке в статье