LinuxNotes
← Все статьи

Systemd: управление службами Linux

Статус, автозапуск, журналы и собственная пользовательская служба.

Linux2 мин чтения

Как устроена служба

Systemd управляет юнитами: службами, таймерами, точками монтирования и другими объектами. Инструкция подходит для систем с systemd, включая Arch и CachyOS. Команды ниже различают запуск сейчас и включение при загрузке.

Узнать состояние

systemctl --failed
systemctl list-units --type=service --state=running
systemctl status systemd-journald.service

status показывает состояние и последние сообщения. Код выхода может быть ненулевым для неактивной службы: это диагностическая информация, а не обязательно ошибка команды.

Запуск и автозапуск

Для установленного SSH-сервера в Arch:

sudo systemctl start sshd.service
sudo systemctl enable sshd.service

start запускает сейчас, enable добавляет автозапуск. Обратные действия - stop и disable. Команда enable --now объединяет оба шага. Не останавливайте удалённый доступ без запасного способа подключения.

Чтение журнала

journalctl -u sshd.service -b --no-pager
journalctl -u sshd.service -f

Первая команда ограничивает журнал текущей загрузкой, вторая следит за новыми событиями. Для выхода из слежения нажмите Ctrl+C. Если доступа недостаточно, выполните команду с sudo.

Своя пользовательская служба

Создайте каталог ~/.config/systemd/user и файл hello.service:

[Unit]
Description=Write a greeting to the journal

[Service]
Type=oneshot
ExecStart=/usr/bin/echo Hello from Linux Notes

Служба выполняет одну команду от текущего пользователя. Она не требует root и не меняет систему.

systemctl --user daemon-reload
systemctl --user start hello.service
journalctl --user -u hello.service --no-pager

После завершения oneshot-служба обычно становится inactive: для такой задачи это ожидаемо. daemon-reload перечитывает определения юнитов, но не перезапускает службы.

Изменение системных юнитов

Используйте sudo systemctl edit имя.service, чтобы создать override, а не редактируйте файлы пакета в /usr/lib/systemd/system. Перед изменением посмотрите объединённую конфигурацию через systemctl cat имя.service.

Документация: systemctl.

Читайте дальше