Коротко о главном
systemd управляет службами, монтированием, таймерами и журналами. Многие администраторы используют только systemctl, но понимание юнитов и зависимостей позволяет диагностировать запуск и делать собственные сервисы.
Юниты описывают, как запускать приложение, от кого зависит и что делать при сбое. Таймеры заменяют cron с лучшим логированием, а journalctl даёт структурированные логи.
Нужно быстро начать работать с systemd? Вот короткий маршрут: установка, минимальная настройка и проверка результата. Длинную теорию оставим для отдельных материалов.
Установка
В 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
Шпаргалка по командам
- Создайте service-юнит: sudo systemctl edit —full —force myapp.service
- Проверьте синтаксис и запустите: sudo systemctl daemon-reload
- Добавьте таймер: [Timer]
- Смотрите журналы: journalctl -u myapp.service -n 100 —no-pager
- Разберите зависимости: systemctl list-dependencies myapp.service
Практические советы
Эти рекомендации проверены на повседневных задачах. Начните с тех, которые закрывают вашу текущую боль, а не со всего списка сразу.
Совет 1. Не запускайте сервисы от root без необходимости.
Не запускайте сервисы от root без необходимости.
Совет 2. Используйте Restart=on-failure с задержкой.
Используйте Restart=on-failure с задержкой.
Совет 3. Настройте лимиты памяти и файловых дескрипторов.
Настройте лимиты памяти и файловых дескрипторов.
Совет 4. Для длинных задач используйте Type=oneshot и таймер.
Для длинных задач используйте Type=oneshot и таймер.
Что дальше
Быстрый старт не означает «настроить навсегда». Когда базовый сценарий заработает, вернитесь к конфигурации и проверьте, что она переживёт перезагрузку: файлы на месте, служба включена в автозагрузку, путь к данным не зависит от текущего каталога.
Дальше имеет смысл разобраться с резервной копией и журналами systemd. Это не самая заметная часть работы, но именно она превращает эксперимент в инструмент, которым можно пользоваться каждый день.
Чек-лист
- Команды из шпаргалки выполняются без ошибок после перезагрузки.
- Пароли и токены не хранятся в истории команд и конфигурации в открытом виде.
- Понятно, где смотреть логи и что считать признаком проблемы.
- Есть копия конфигурации, которую можно восстановить.
Короткие ответы на частые вопросы
Нужно ли запускать всё от root?
Нет. Права root нужны для установки пакетов и изменения системных файлов, но сама программа и её данные должны принадлежать отдельному пользователю. Постоянная работа под root превращает любую ошибку в критическую.
Что делать, если после перезагрузки ничего не работает?
Сначала проверьте, включена ли служба в автозагрузку и не изменился ли путь к конфигурации. Посмотрите журнал текущей загрузки: он почти всегда указывает на отсутствующий файл, неверные права или занятый порт.
Как обновлять без сюрпризов?
Читайте примечания к версии, делайте резервную копию конфигурации и проверяйте обновление на тестовом стенде. Не обновляйтесь в пятницу вечером перед выходными: время на откат должно быть частью плана.
Итог
Этого достаточно, чтобы начать. Дальше углубляйтесь по мере задач: документация systemd станет понятнее, когда появится реальный сценарий использования.