Linux

Пошаговое руководство по настройке и использованию таймеров Systemd в Linux

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

Обновлено 8 августа 2026 г.
10-15 мин
Средняя
FixPedia Team
Применимо к:Ubuntu 22.04 LTSDebian 12Fedora 38openSUSE Leap 15.5

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

Systemd-timers — это современная альтернатива cron, которая использует тот же менеджер системных служб. Таймеры позволяют запускать скрипты, сервисы или другие unit-файлы по точному расписанию или на основе событий. По сравнению с cron они предлагают более гибкие триггеры (например, запуск по таймеру после активации другой службы) и лучше интегрированы с системой.

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

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

  • Система с systemd (любой современный дистрибутив Linux: Ubuntu, Debian, Fedora, openSUSE и т.д.).
  • Права на запись в ~/.config/systemd/user/ (для пользовательских таймеров) или /etc/systemd/system/ (для системных таймеров).
  • Базовое знание работы с консолью и редактором текста (например, nano или vim).
  • Пример скрипта, который вы хотите запускать по расписанию (например, #!/bin/bash файл).

Пошаговая инструкция

Шаг 1: Создайте unit-файл для скрипта

Сначала определите службу, которая будет выполнять вашу задачу. Пример unit-файла для скрипта /home/user/scripts/backup.sh:

# /etc/systemd/system/backup.service
[Unit]
Description=Backup script

[Service]
Type=oneshot
ExecStart=/home/user/scripts/backup.sh
User=user

Шаг 2: Создайте таймер-файл

Теперь создайте таймер, который будет запускать службу. Пример таймера, который запускается каждый день в 02:00:

# /etc/systemd/system/backup.timer
[Unit]
Description=Run backup daily at 02:00

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

[Install]
WantedBy=timers.target

Шаг 3: Включите и запустите таймер

Перезагрузите daemon, чтобы systemd обнаружил новые unit-файлы, затем включите и запустите таймер:

sudo systemctl daemon-reload
sudo systemctl enable backup.timer
sudo systemctl start backup.timer

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

Убедитесь, что таймер активен и запланирован:

# Проверка статуса таймера
sudo systemctl status backup.timer

# Список всех таймеров
sudo systemctl list-timers --all

Если таймер отображается как активен (включен), он будет запускать службу по расписанию.

Шаг 5: Настройте периодичность с помощью календаря

Вы можете изменить расписание, отредтировав OnCalendar. Примеры:

  • Каждый час: OnCalendar=*:0/60
  • Каждый понедельник в 9 утра: OnCalendar=Mon *-*-* 09:00:00
  • Каждый день в 8:00 и 20:00: OnCalendar=*-*-* 08:00:00,20:00:00

После изменения отредактируйте таймер, выполните systemctl daemon-reload и перезапустите таймер:

sudo systemctl restart backup.timer

Шаг 6: Удалите таймер (если нужно)

Если таймер больше не нужен:

sudo systemctl disable backup.timer
sudo systemctl stop backup.timer
sudo rm /etc/systemd/system/backup.timer
sudo systemctl daemon-reload

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

Чтобы убедиться, что таймер работает, проверьте лог службы после её запуска:

journalctl -u backup.service -f

Вы также можете просмотреть журнал таймеров:

journalctl -u backup.timer -f

Если в логах отображается Triggered Reason: Timer was activated, таймер успешно запустил службу.

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

⚠️ Важно: Убедитесь, что ExecStart в unit-файле указывает на существующий и исполняемый скрипт. Если скрипт не найден, таймер зарегистрирует ошибку, но не отобразит её в статусе.

💡 Совет: Для отладки сложных расписаний используйте systemd-analyze calendar для проверки синтаксиса:

systemd-analyze calendar "*-*-* 02:00:00"

Если вы используете пользовательские таймеры (в ~/.config/systemd/user/), убедитесь, что вы запустили systemd --user и включили таймер с помощью systemctl --user.

⚠️ Важно: Таймеры, настроенные с Persistent=true, будут запускаться после перезагрузки системы, в то время как Persistent=false — нет. Выберите параметр в зависимости от того, нужно ли вам запускать задачу после перезагрузки.

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

Как создать простой таймер с помощью systemd?
В чем разница между systemd timer и cron?
Как проверить состояние таймера?
Как настроить таймер с задержкой запуска?

Полезное

Создайте unit-файл
Создайте таймер-файл
Включите и запустите таймер
Проверьте состояние таймера
Настройте периодичность с помощью календаря