Коротко о главном

systemd управляет службами, монтированием, таймерами и журналами. Многие администраторы используют только systemctl, но понимание юнитов и зависимостей позволяет диагностировать запуск и делать собственные сервисы.

Юниты описывают, как запускать приложение, от кого зависит и что делать при сбое. Таймеры заменяют cron с лучшим логированием, а journalctl даёт структурированные логи.

Большинство проблем с systemd сводится к нескольким повторяющимся ошибкам. Ниже — что проверить в первую очередь и как не усугубить ситуацию.

Почему это происходит

Ошибки почти всегда связаны с контекстом: другая версия пакета, не тот пользователь, устаревший конфиг или команда из руководства для другой системы. systemd не исключение. Поэтому сначала фиксируем исходное состояние, затем меняем одну вещь за раз.

Типичные ошибки

Ниже — сбои, которые встречаются чаще всего. Перед исправлением сохраните текущие конфиги и запишите, какие изменения вносите: так проще откатиться.

1. Unit not found

Проверьте имя файла, daemon-reload и путь. systemctl cat покажет, какой файл используется.

2. Сервис падает сразу после старта

Смотрите journalctl -u и код выхода. Часто виноваты права, отсутствующий каталог или неверный ExecStart.

3. Таймер не срабатывает

Проверьте systemctl list-timers, Persistent и время. Убедитесь, что таймер включён, а не только запущен.

Как настроить правильно

Правильная последовательность проста: проверить версию и зависимости, сделать резервную копию конфигурации, внести минимальное изменение, проверить логи и только потом двигаться дальше.

Установка

В Debian, Ubuntu и Linux Mint используется пакетный менеджер APT:

sudo apt install systemd

В Fedora и RHEL-совместимых системах пакет ставится через DNF:

sudo dnf install systemd

В Arch Linux и производных пакет доступен в официальных репозиториях:

sudo pacman -S systemd

1. Создайте service-юнит

Файл кладите в /etc/systemd/system. Описывайте абсолютные пути и пользователя, от которого работает сервис.

sudo systemctl edit --full --force myapp.service

2. Проверьте синтаксис и запустите

Используйте daemon-reload после изменения юнита. status показывает последние логи и код выхода.

sudo systemctl daemon-reload
sudo systemctl enable --now myapp.service
systemctl status myapp.service

3. Добавьте таймер

Таймер запускает oneshot-сервис по расписанию. Не смешивайте расписание и саму задачу в одном юните.

[Timer]
OnCalendar=daily
Persistent=true

[Install]
WantedBy=timers.target

4. Смотрите журналы

journalctl фильтрует по юниту, времени и приоритету. Для live-режима используйте -f.

journalctl -u myapp.service -n 100 --no-pager
journalctl -u myapp.service -f

Рабочий конфиг

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

[Unit]
Description=My backup job
After=network-online.target

[Service]
Type=oneshot
ExecStart=/usr/local/bin/backup.sh

Практические советы

Эти рекомендации проверены на повседневных задачах. Начните с тех, которые закрывают вашу текущую боль, а не со всего списка сразу.

Совет 1. Не запускайте сервисы от root без необходимости.

Не запускайте сервисы от root без необходимости.

Совет 2. Используйте Restart=on-failure с задержкой.

Используйте Restart=on-failure с задержкой.

Совет 3. Настройте лимиты памяти и файловых дескрипторов.

Настройте лимиты памяти и файловых дескрипторов.

Совет 4. Для длинных задач используйте Type=oneshot и таймер.

Для длинных задач используйте Type=oneshot и таймер.

Профилактика

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

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

Чек-лист

  • Версия пакета и конфигурация зафиксированы и доступны для сравнения.
  • Есть автоматическая проверка синтаксиса перед перезапуском службы.
  • Журналы ротуются, а диск не заполняется ими за неделю.
  • Изменения проходят через тестовый стенд, а не сразу на рабочий сервер.

Итог

Большинство ошибок с systemd лечится не переустановкой, а проверкой конфигурации, логов и прав доступа. Действуйте по одному изменению за раз — и причина быстро найдётся.

Насколько публикация полезна?

Нажмите на звезду, чтобы оценить!

Средняя оценка 0 / 5. Количество оценок: 0

Оценок пока нет. Поставьте оценку первым.

Поделиться: Telegram ВКонтакте