Linux

Настройка автоматических задач в Linux с помощью cron и systemd

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

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

Введение

Автоматизация рутинных операций — ключ к эффективной работе с любым Linux-сервером или рабочей станцией. Встроенные инструменты планирования cron и systemd timers позволяют запускать скрипты, команды и даже графические приложения по заданному расписанию без вмешательства пользователя. После выполнения этого руководства вы сможете настраивать и управлять как задачами cron, так и таймерами systemd, а также диагностировать распространённые ошибки.

Требования

  • Любой современный дистрибутив Linux (Ubuntu, Debian, Fedora, CentOS и др.).
  • Права администратора (sudo), если вы создаёте системные задачи.
  • Базовые знания bash и понимание путей к файлам.
  • Желательно наличие текстового редактора для изменения конфигурационных файлов.

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

Шаг 1: Подключите репозиторий и установите необходимые пакеты

Большинство дистрибутивов поставляются с cron и systemd предустановленными, но убедитесь, что они присутствуют:

# Для Debian/Ubuntu
sudo dpkg -l | grep -E 'cron|systemd'

# Для RHEL/CentOS/Fedora
sudo rpm -q cron systemd

Если пакеты отсутствуют, установите их:

# Debian/Ubuntu
sudo apt-get update && sudo apt-get install cron systemd

# RHEL/CentOS/Fedora
sudo yum install cronie systemd   # или sudo dnf install cronie systemd

💡 Совет: После установки перезапустите службу cron: sudo systemctl restart cron.

Шаг 2: Создайте задачу cron

Откройте редактор кронтаб:

crontab -e

Добавьте строку, например, для запуска скрипта каждые 15 минут:

*/15 * * * * /opt/myscript.sh >> /var/log/myscript.log 2>&1

Сохраните файл и выйдите. Новая задача автоматически активируется.

Шаг 3: Создайте таймер systemd

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

Файл таймера (/etc/systemd/system/mytimer.timer):

[Unit]
Description=My scheduled task timer

[Timer]
# Выполнять каждые 15 минут
OnCalendar=*:0/15
Persistent=true

[Install]
WantedBy=timers.target

Файл сервиса (/etc/systemd/system/mytimer.service):

[Unit]
Description=My scheduled task service

[Service]
Type=oneshot
ExecStart=/opt/myscript.sh

Обеспечьте правильные права:

sudo systemctl daemon-reload
sudo systemctl enable --now mytimer.timer

Таймер теперь будет активироваться согласно расписанию.

Шаг 4: Проверьте задания

Убедитесь, что задачи зарегистрированы:

# Список задач cron
crontab -l

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

Вы увидите запланированные и активные записи.

Шаг 5: Отслеживайте вывод и журналы

  • cron: Перенаправляйте вывод в лог-файл (как показано в шаге 2) или используйте logger:
    */5 * * * * logger "Ежечасовая проверка системы"
    
  • systemd: Читайте журналы в режиме реального времени:
    journalctl -u mytimer.service -f
    

    Для задач cron проверьте /var/log/syslog или /var/log/cron:
    grep CRON /var/log/syslog
    

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

  1. Запустите скрипт вручную, чтобы убедиться, что путь /opt/myscript.sh корректен.
  2. Проверьте лог-файл /var/log/myscript.log после ожидаемого интервала (для cron — через 15 минут, для systemd — через несколько минут).
  3. Используйте journalctl -u mytimer.service --since "now - 5 minutes" для подтверждения записей от таймера.

Если вывод отсутствует, проверьте права выполнения скрипта (chmod +x /opt/myscript.sh) и убедитесь, что пользователь, от имени которого задача выполняется, имеет доступ к необходимым ресурсам.

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

  • Задача cron не запускается: Проверьте синтаксис с помощью crontab -l, убедитесь, что файл не пуст, и проверьте /var/log/syslog на ошибки cron.
  • Таймер systemd не срабатывает: Убедитесь, что Persistent=true и таймер включён (systemctl is-enabled mytimer.timer). Используйте journalctl -u mytimer.timer для отладки.
  • Скрипт завершается с ошибкой: Добавьте set -e в начало скрипта и перенаправляйте stderr в лог. В systemd вы также можете включить StandardError=journal в сервисном файле.
  • Графическое приложение не отображается: Для cron установите export DISPLAY=$DISPLAY и export XAUTHORITY=$XAUTHORITY перед командой. Для systemd создайте пользовательский сервис в ~/.config/systemd/user/ с XDG_SESSION_TYPE=wayland или XDG_SESSION_TYPE=x11.

Не стесняйтесь адаптировать расписание, добавлять mehrere условия (OnCalendar= для systemd) или использовать at для разовых заданий в зависимости от конкретных потребностей.

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

Как просмотреть список уже созданных автоматических задач?
Что делать, если запланированный скрипт не выполняется?
Можно ли запускать графические приложения через автоматические задачи?
Как настроить повторяющееся выполнение задачи каждые несколько минут?

Полезное

Подключите репозиторий и установите необходимые пакеты
Создайте задачу cron
Создайте таймер systemd
Проверьте задания
Отслеживайте вывод и журналы

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