Как устроена служба
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.