ServerAID
Найти гайд, команду, тег… ⌘ K
Глоссарий  ·  термин

cron — что это и зачем

cron — классический планировщик задач в Linux: запускает команды по расписанию (раз в минуту, ежедневно в 03:00, каждое воскресенье). Конфигурируется через `crontab` или файлы в `/etc/cron.*`. На современной Ubuntu рядом с ним работает systemd-таймер — более новая альтернатива.

cron — классический планировщик задач в Linux: запускает команды по расписанию (раз в минуту, ежедневно в 03:00, каждое воскресенье). Конфигурируется через crontab или файлы в /etc/cron.*. На современной Ubuntu рядом с ним работает systemd-таймер — более новая альтернатива.

Что это в одном абзаце

cron — демон, который раз в минуту просыпается, читает свои таблицы (crontab) и запускает те задачи, у которых наступило время выполнения. Это базовая автоматизация для серверов: бэкапы по ночам, ротация логов, проверка свободного места, плановые обновления.

# Пример crontab-записи: каждое воскресенье в 03:00 — бэкап
0 3 * * 0  /usr/local/bin/backup.sh

cron существует с 1975 года и стандартизирован POSIX, поэтому ваш crontab будет работать везде — от Ubuntu до OpenBSD и macOS.

Синтаксис cron expression

Каждая строка crontab — это пять полей расписания плюс команда:

┌── минута (0–59)
│ ┌── час (0–23)
│ │ ┌── день месяца (1–31)
│ │ │ ┌── месяц (1–12)
│ │ │ │ ┌── день недели (0–7, 0 и 7 = воскресенье)
│ │ │ │ │
*  *  *  *  *   command

Поддерживается несколько форм значений:

  • * — любое значение («каждая минута»).
  • 5 — конкретное значение («в 5 минут часа»).
  • */15 — каждые 15 единиц («каждые 15 минут»).
  • 0,30 — список («в 0 и 30 минут»).
  • 1-5 — диапазон («с понедельника по пятницу» в поле дня недели).

Боевые примеры:

Расписание Что делает
* * * * * каждую минуту
*/5 * * * * каждые 5 минут
0 * * * * каждый час в :00
0 3 * * * ежедневно в 03:00
0 3 * * 0 по воскресеньям в 03:00
0 3 1 * * 1-го числа каждого месяца в 03:00
30 1 * * 1-5 пн-пт в 01:30

cron в Vixie/ISC-варианте (тот, что в Ubuntu) поддерживает алиасы: @reboot, @hourly, @daily, @weekly, @monthly, @yearly. Удобно и читается лучше:

@daily   /usr/local/bin/cleanup.sh
@reboot  /usr/local/bin/warm-cache.sh

Если синтаксис вызывает сомнения — проверяйте через crontab.guru перед сохранением.

Где живут расписания

В Ubuntu cron смотрит на несколько источников:

  • crontab -e — личное расписание текущего пользователя. Файл лежит в /var/spool/cron/crontabs/<user>. Запускается от имени этого пользователя.
  • sudo crontab -e -u www-data — расписание другого пользователя.
  • /etc/crontab — системный crontab. У каждой записи есть дополнительное поле — пользователь, от имени которого выполнять.
  • /etc/cron.d/<package> — конфиги cron, поставляемые пакетами (логротейт, certbot, anacron). Тоже с полем пользователя.
  • /etc/cron.hourly/, cron.daily/, cron.weekly/, cron.monthly/ — просто папки со скриптами. Если положили туда исполняемый файл — он запустится с указанной периодичностью. Запускает их run-parts от имени root.

Команды управления:

crontab -e           # отредактировать своё расписание
crontab -l           # показать своё расписание
crontab -r           # удалить своё расписание (осторожно!)
sudo systemctl status cron       # запущен ли демон
sudo journalctl -u cron --since '1 hour ago'   # логи cron

cron vs systemd-таймер

С приходом systemd появилась альтернатива cron — таймеры. Это unit-файлы *.timer, парные к *.service. Запуск:

sudo systemctl list-timers --all
sudo systemctl status apt-daily-upgrade.timer

Когда systemd-таймер лучше cron:

  • Богаче логи — каждый запуск идёт в journald, фильтруется через journalctl -u <service>. cron пишет лог в почту root или в /var/log/syslog.
  • Persistent=true — если машина была выключена, когда наступило время, таймер сработает после загрузки. cron такие задания пропускает (для этого ставят отдельный anacron).
  • Ресурсные ограниченияMemoryLimit, CPUQuota прямо в unit-файле.
  • Зависимости и условияAfter=network-online.target, ConditionACPower=true. cron не умеет ничего такого.

Когда cron всё ещё уместен:

  • Совместимость — скрипты, которые должны работать одинаково на всех Linux/UNIX.
  • Простота — одна строчка в crontab, не нужно писать два unit-файла.
  • /etc/cron.daily/-стиль — пакеты Ubuntu массово используют это для своих периодических задач (certbot, apt-listchanges).

Большинство современных дистрибутивных пакетов уже мигрировали с cron на systemd-таймеры (apt-daily.timer, fstrim.timer, logrotate.timer). Для своих новых скриптов на Ubuntu имеет смысл писать сразу таймер. Для разовой задачи «раз в день вычистить /tmp» — cron быстрее.

Грабли cron

  • PATH — у cron минимальный PATH, обычно /usr/bin:/bin. Команды типа aws или pg_dump могут не найтись. Решение: писать абсолютный путь (/usr/bin/pg_dump) или явно задавать PATH в начале crontab.
  • Окружение — нет ваших ~/.bashrc-переменных, LANG, LC_ALL могут отличаться. Шелл — обычно /bin/sh (на Ubuntu это dash), не bash. Если нужен bash — пишите bash -c '...' или указывайте SHELL=/bin/bash в crontab.
  • Логи — по умолчанию вывод задачи отправляется почтой пользователю. На сервере без MTA это «теряется». Перенаправляйте: 0 3 * * * /script.sh >> /var/log/script.log 2>&1.
  • Длинные задачи — cron не следит, идёт ли предыдущий запуск. Если задача дольше интервала, накопится несколько параллельных. Лечится flock: 0 * * * * /usr/bin/flock -n /tmp/myjob.lock /script.sh.

Частые вопросы

Что такое cron в Linux

Демон, который запускает команды по расписанию. Раз в минуту читает таблицы расписаний (crontab) и стартует те задачи, у которых пришло время. Стандартный планировщик задач в Linux с 1975 года; работает на любых UNIX-подобных системах.

Чем cron отличается от crontab

cron — это сам демон (фоновой процесс), который работает в системе. crontab — утилита для редактирования таблицы расписаний (crontab -e) и сами файлы расписаний в /var/spool/cron/. Демон один на всю систему, расписаний может быть много (по одному на пользователя плюс системные).

Как добавить задачу в cron на Ubuntu

crontab -e — откроется редактор; добавьте строку формата минута час день месяц день_недели команда. Сохраните — cron подхватит изменения автоматически в течение минуты. Пример: 0 3 * * 0 /usr/local/bin/backup.sh запустит backup.sh каждое воскресенье в 03:00.

Что лучше cron или systemd-таймер

Для новых задач на Ubuntu обычно лучше systemd-таймер: богаче логи, есть Persistent=true (наверстать пропущенный запуск после перезагрузки), ресурсные ограничения, условия запуска. Для одноразовых простых задач или для совместимости с другими UNIX-системами cron остаётся проще и быстрее.

Где смотреть логи cron на Ubuntu

sudo journalctl -u cron --since '1 hour ago' — логи самого демона: какие задачи он запускал. Вывод самих задач (stdout/stderr) cron по умолчанию шлёт почтой; лучше явно перенаправлять в файл: >> /var/log/myjob.log 2>&1. Альтернатива — переписать на systemd-таймер, у которого вывод задачи идёт в journald.

Почему cron-задача работает в шелле, но не из crontab

Чаще всего — разница в окружении. У cron минимальный PATH=/usr/bin:/bin, отсутствуют переменные из .bashrc, шелл — /bin/sh (dash), не bash. Решения: писать абсолютные пути к бинарям, явно задавать PATH=... и SHELL=/bin/bash в начале crontab, или оборачивать команду в bash -c '...'.

Что почитать

  • systemd — современная альтернатива cron на Ubuntu: systemd-таймеры дают больше контроля, лучше логи и условия запуска.
  • systemctl enable: пишем свой systemd unit — как сделать собственный таймер: пара *.timer + *.service вместо строчки в crontab.
  • apt update и apt upgradeunattended-upgrades в Ubuntu запускается через apt-daily.timer и apt-daily-upgrade.timer, классический пример миграции с cron на systemd.

Похожие материалы

Сроки поддержки Ubuntu LTS — на сколько хватает релиза
Глоссарий

Сроки поддержки Ubuntu LTS — на сколько хватает релиза

Ubuntu LTS — это релиз с долгой поддержкой: 5 лет бесплатных security-обновлений и 10 лет с подпиской Ubuntu Pro. Промежуточные релизы (24.10, 25.04) живут всего 9 месяцев. Разбираем, какие версии сейчас актуальны, до какой даты безопасно сидеть на 22.04 и 24.04, и когда выходит 26.04 LTS.

Редакция
Debian или Ubuntu — что выбрать
Глоссарий

Debian или Ubuntu — что выбрать

Debian и Ubuntu — две родственные операционные системы: Ubuntu сделана на базе Debian и тянет оттуда пакеты, формат `.deb` и пакетный менеджер apt. Различия — в скорости релизов, наборе из коробки и философии. Кратко: Debian Stable консервативнее и аскетичнее, Ubuntu LTS — свежее и удобнее, особенно для рабочего стола и облаков. Под прод подходят оба, выбор сводится к тому, что вам важнее: предсказуемость или новизна.

Редакция
bash — что это и зачем
Глоссарий

bash — что это и зачем

bash (Bourne Again SHell) — это командная оболочка, которая обрабатывает то, что вы вводите в терминале Linux. Запускает программы, расширяет переменные, выполняет конструкции `if` / `for`, читает скрипты из файлов с шебангом `#!/bin/bash`. На Ubuntu — оболочка по умолчанию для интерактивных пользователей; для системных скриптов используют более строгий `/bin/sh` (`dash`).

Редакция
Ubuntu — что это и зачем
Глоссарий

Ubuntu — что это и зачем

Ubuntu — самый популярный дистрибутив Linux: бесплатная операционная система на базе Debian, удобная и для серверов, и для рабочего стола. Под капотом Linux-ядро, поверх — пакетный менеджер apt, рабочий стол GNOME (на Desktop) и стек systemd-сервисов. Релизы выходят каждые полгода, LTS-версии — раз в два года и поддерживаются 5 лет.

Редакция