Linux

Создание и управление планированием задач с помощью systemd timer – полное руководство

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

Обновлено 17 июля 2026 г.
10-15 мин
Средняя
FixPedia Team
Применимо к:Ubuntu 20.04Ubuntu 22.04Debian 11Fedora 36

Введение / Зачем это нужно

systemd timer — это современная альтернатива cron, которая позволяет планировать выполнение команд с точностью до секунд. Использование таймеров дает вам гибкость задавать сложные расписания, включать случайные задержки и получать подробную информацию о работе через journal. После прочтения этого руководства вы сможете создавать таймеры для резервного копирования, обновления системы, очистки логов или любых других периодических задач — без необходимости в дополнительных пакетах.

Требования / Подготовка

  • Современная дистрибутива Linux с systemd (например, Ubuntu, Debian, Fedora, Arch).
  • Права администратора (sudo), если вы настраиваете системные таймеры, или учетная запись пользователя для пользовательских таймеров.
  • Текстовый редактор (nano, vim, sed).
  • Базовое понимание unit-файлов systemd.

Шаг 1: Создание файла таймера

Создайте файл таймера в /etc/systemd/system/ (для системных таймеров) или в ~/.config/systemd/user/ (для пользовательских таймеров). Например, mytimer.timer:

[Unit]
Description=Пример таймера systemd

[Timer]
OnCalendar=*-*-* 02:00:00
Persistent=true

[Install]
WantedBy=timers.target

💡 Совет: Persistent=true гарантирует, что таймер отработает сразу после включения, если он был выключен.

После сохранения файла выполните:

systemctl daemon-reload

Шаг 2: Настройка расписания

Редактировать секцию [Timer], чтобы задать нужное расписание:

  • OnCalendar=*-*-* 03:00:00 — ежедневно в 3 утра.
  • OnBootSec=10min — выполнить через 10 минут после загрузки системы.
  • RandomizedDelaySec=30 — добавить случайную задержку до 30 секунд.

Сохраните изменения и выйдите из редактора.

Шаг 3: Активация и запуск таймера

Активируйте таймер, чтобы он запускался после перезагрузки, и запустите немедленно:

systemctl enable mytimer.timer
systemctl start mytimer.timer
systemctl status mytimer.timer

Статус active (auto-restart) означает, что таймер работает корректно.

Шаг 4: Проверка состояния таймера

Просмотрите запланированные запуски:

systemctl list-timers --all

Для отслеживания событий в реальном времени:

journalctl -u mytimer.timer -f

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

Шаг 5: Устранение распространенных проблем

СимптомВероятная причинаРешение
Failed to read unit fileФайл таймера отсутствует или имеет неправильное имяУбедитесь, что файл находится в /etc/systemd/system/ и называется mytimer.timer
Unit mytimer.timer could not be foundНеверный путь или опечатка в имениПроверьте systemctl list-unit-files "*timer*"
Таймер неактивен (inactive)Не выполнены enable/start или ошибка в синтаксисеЗапустите systemd-analyze verify mytimer.timer для проверки синтаксиса, затем systemctl daemon-reload, systemctl enable и systemctl start
Сервис не выполняетсяНеправильный пользователь/разрешения или сломанный service unitПроверьте mytimer.service на корректность, настройте User= или Group=, если нужно, и выполните systemctl restart mytimer.service
Permission denied при запускеТаймер работает под неправильным пользователемИзмените User= в [Service] на пользователя с необходимыми правами или запустите сервис от имени root

Проверка результата

Подождите до следующего запланированного времени (например, 2:00) или запустите таймер вручную:

systemctl start mytimer.timer

Проверьте журналы:

journalctl -u mytimer.timer -b

Найдите строку, где запускается связанная служба (mytimer.service). Если вы настроили выполнение команды (например, echo "done" > /tmp/done.txt), убедитесь, что файл создан или что вывод команды записан в лог.

Возможные проблемы

  • Неправильный формат OnCalendar – используйте systemd.time-спецификатор или cron-аналог (* * * * *).
  • Отсутствие WantedBy=timers.target – таймер не будет зарегистрирован системой.
  • Дублирующие таймеры – убедитесь, что не создано несколько таймеров с одинаковым OnCalendar.
  • Сбой service unit – проверьте mytimer.service на наличие синтаксических ошибок, прав и зависимостей.

Если таймер по-прежнему не работает, запустите systemd-analyze verify mytimer.timer и journalctl -u mytimer.timer -b для детальной диагностики.

Часто задаваемые вопросы

Как создать новый таймер с помощью systemd?
Как просмотреть список активных таймеров?
Как включить и запустить таймер?
Как отладить проблемы с работой таймера?

Полезное

Создание файла таймера
Настройка расписания
Активация и запуск таймера
Проверка состояния таймера
Устранение распространенных проблем

Эта статья помогла вам решить проблему?