Cron-задача (cron job) — запись в файле crontab, которая указывает демону crond выполнять команду или скрипт по заданному расписанию. Cron — основной механизм планирования задач в Unix-подобных системах, включая все Linux-дистрибутивы, macOS и FreeBSD.
Синтаксис crontab
Каждая строка crontab состоит из пяти полей расписания и команды. Поля: минута (0-59), час (0-23), день месяца (1-31), месяц (1-12), день недели (0-7, где 0 и 7 = воскресенье).
# Примеры cron-задач:
0 2 * * * /usr/bin/certbot renew # Каждый день в 02:00
*/15 * * * * /usr/bin/check.sh # Каждые 15 минут
0 0 1 * * /opt/backup.sh # 1-го числа каждого месяца
30 8 * * 1-5 /usr/bin/report.py # Пн-Пт в 08:30
@reboot /opt/start-services.sh # При каждой загрузке ОС
Спецсимвол * означает «любое значение». Вместо числовых значений можно использовать именованные псевдонимы: @daily, @weekly, @monthly, @reboot (запуск при старте системы). Диапазоны задаются дефисом (1-5), шаги — косой чертой (*/15 — каждые 15 единиц).
Как работает crond
Демон crond запускается при загрузке операционной системы и каждую минуту сканирует crontab-файлы всех пользователей (хранятся в /var/spool/cron/) и системные файлы (/etc/cron.d/, /etc/cron.daily/, /etc/cron.hourly/). При совпадении текущего времени с расписанием — запускает соответствующую команду под указанным пользователем.
Вывод команды по умолчанию отправляется на email пользователя (настраивается переменной MAILTO в crontab). Для подавления вывода: command >/dev/null 2>&1. Для логирования в файл: command >>/var/log/myjob.log 2>&1.
История
Первая версия cron написана Ken Thompson для Version 7 Unix в 1977 году. В 1987 году Paul Vixie выпустил Vixie Cron — переработанную версию с расширенным синтаксисом: поддержка диапазонов, шагов, именованных значений. В 1992 году crontab-формат вошёл в стандарт POSIX. Сегодня большинство Linux-дистрибутивов используют Vixie Cron или его форк — ISC Cron. В systemd-системах функцию планирования частично берут на себя systemd timers, но cron по-прежнему входит в большинство серверных образов.
Управление crontab
Основные команды:
crontab -e— редактировать личный crontab текущего пользователя.crontab -l— просмотреть текущие задачи.crontab -r— удалить все задачи (без подтверждения).crontab -u username -e— редактировать crontab другого пользователя (только root).
Системные задачи с привилегиями root размещают в /etc/cron.d/ — файлы с явным указанием пользователя в шестом поле строки.
Cron в хостинге
На виртуальном хостинге cron-задачи доступны через панели управления (cPanel, ISPmanager). Минимальный интервал обычно 1 минута, на бюджетных тарифах — 5-15 минут. На VDS и выделенных серверах ограничений нет. Типичные задачи: резервное копирование баз данных, обновление SSL-сертификатов, генерация отчётов, очистка временных файлов, мониторинговые проверки.
На что обращать внимание
Cron запускается с минимальным PATH (/usr/bin:/bin), поэтому лучше указывать полные пути к командам. Переменные окружения из .bashrc в cron не доступны — задавай их явно в crontab или в начале скрипта. Если задача работает под root и обращается к файлам пользователя — проверяй права доступа. Для отладки работает сервис crontab.guru — переводит cron-выражение в читаемый текст.