Wiki
DevOps

cron / crontab — что это простыми словами

cron — демон Unix, запускающий задачи по расписанию (каждый день в 3 утра / каждую пятую минуту). Формат crontab: 5 полей + команда. Ветеран с 1975.

cron — фоновая служба Unix/Linux, читающая `/etc/crontab` и `~/.crontab` пользователей и запускающая команды в указанные моменты. Синтаксис: 5 полей + команда: `минута час день_месяца месяц день_недели команда`. Пример `0 3 * * * /usr/local/bin/backup.sh` — каждый день в 03:00 запуск backup.sh.

Спец-нотация: `*` — любое, `*/5` — каждые 5, `1,15,30` — список, `1-5` — диапазон, `@daily` = `0 0 * * *`, `@reboot` — при загрузке. Утилита crontab.guru — визуально расшифровывает.

Ключевые команды: `crontab -e` (правка своего), `crontab -l` (просмотр), `crontab -r` (удалить — опасно, `-r` без подтверждения), `sudo systemctl status cron` (статус демона на Debian, `crond` на RHEL). Логи — `/var/log/syslog | grep CRON` или `journalctl -u cron`.

Грабли: (1) не выполняется — почти всегда `$PATH` пуст в cron-среде, использовать абсолютные пути. (2) тихая ошибка — stderr не логируется, добавьте `>> /var/log/backup.log 2>&1`. (3) пересечение задач — если `backup.sh` идёт > 24 ч, следующий cron запустит вторую копию → используйте `flock`. (4) timezone — cron работает в системном TZ, не UTC — check `date` перед плансированием.

Современная альтернатива — systemd timers (точнее, лучше логи через journald, зависимости между units). cron живёт по инерции + простой.

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

Как получить письмо об ошибке?
Установить `[email protected]` в начале crontab + любой stderr идёт письмом (нужен работающий MTA).
Каждые 30 сек можно?
cron минимум 1 минута. 30 сек — либо два cron с разницей в 30, либо systemd timer с `OnUnitActiveSec=30s`.

Смотрите также