Справочник системных ошибок и решений

Windows Server, Active Directory, 1С:Предприятие, СУБД, Linux, Cisco, MikroTik, Asterisk.

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

Linux / DevOps

Systemd-таймеры вместо Cron: создание таймера с логами в journalctl

Обновлено: 27.08.2026 · Официальная документация ↗

Почему Systemd Timers вытесняют классический Cron?

Десятилетиями для запуска скриптов по расписанию использовался crontab. Однако у Cron есть огромные недостатки: при сбое скрипта Cron не пишет понятных логов (нужно настраивать отправку почты или городить перенаправления в файлы), он не умеет контролировать зависимости (например, «запускать скрипт только после старта сети и базы данных») и не сохраняет историю запусков. Systemd Timers — это современная замена Cron, встроенная в операционную систему Linux.

Сравнение Cron и Systemd Timers:

ФункцияКлассический CronSystemd Timers
ЛогированиеСложное, часто теряетсяЦентрализованно пишется в journalctl
Контроль зависимостейОтсутствуетПолная поддержка After=network.target
Пропущенные запускиЕсли сервер был выключен — запуск теряетсяОпция Persistent=true выполнит задачу сразу после включения

Создание таймера systemd за 3 простых шага

Для создания таймера требуется создать 2 связанных файла в каталоге /etc/systemd/system/: файл службы (.service) и файл расписания (.timer).

  1. Шаг 1. Создаем Unit-файл службы (.service)

    sudo nano /etc/systemd/system/my_backup.service

    Вставьте описание команды, которую нужно запускать:

    [Unit]
    Description=Ежедневный скрипт резервного копирования
    Wants=network-online.target
    After=network-online.target
    
    [Service]
    Type=oneshot
    ExecStart=/bin/bash /opt/scripts/backup.sh
  2. Шаг 2. Создаем Unit-файл таймера (.timer)

    sudo nano /etc/systemd/system/my_backup.timer

    Опишите расписание (например, запуск каждый день в 03:00 ночи):

    [Unit]
    Description=Таймер для запуска бэкапа
    
    [Timer]
    # Запуск каждый день в 03:00 ночи:
    OnCalendar=*-*-* 03:00:00
    # Выполнить задачу, если сервер был выключен во время запуска:
    Persistent=true
    
    [Install]
    WantedBy=timers.target
  3. Шаг 3. Активируем и запускаем таймер

    # Перечитываем конфигурацию systemd:
    sudo systemctl daemon-reload
    
    # Включаем и запускаем таймер:
    sudo systemctl enable --now my_backup.timer
    
    # Проверяем статус списка всех активных таймеров:
    sudo systemctl list-timers
  4. Шаг 4. Просмотр логов выполненного таймера

    sudo journalctl -u my_backup.service -n 20 --no-pager
💡 Практика специалистов: Чтобы проверить корректность вашего расписания OnCalendar до применения файла, используйте встроенную утилиту проверки: systemd-analyze calendar "*-*-* 03:00:00". Она покажет точное время следующего срабатывания и предупредит о синтаксических ошибках.

Частые вопросы (FAQ)

Как настроить запуск каждые 15 минут через OnCalendar?

Используйте синтаксис: OnCalendar=*:0/15. Для запуска каждый час: OnCalendar=hourly.

Как протестировать работу скрипта, не дожидаясь наступления времени таймера?

Вы можете вручную запустить службу в любой момент: sudo systemctl start my_backup.service.

Обязательно ли имена .service и .timer должны совпадать?

Да, если таймер называется my_task.timer, systemd автоматически связывает его с одноименной службой my_task.service.

Что означает директива Type=oneshot?

Type=oneshot указывает systemd, что служба выполняет разовую задачу (скрипт) и сразу завершает свою работу, не оставаясь висеть постоянным фоновым процессом.

Полезные материалы
Рекомендуем