Перейти к содержимому

Расшифровка cron

Вставьте строку из crontab и узнайте, когда она на самом деле сработает. До того, как она сработает в три ночи не в тот день.

Работает в вашем браузере. Всё, что вы сюда вставляете или бросаете, никуда не загружается.

Пять полей, @сокращение или целая строка crontab с командой.

Готовые
  1. 0Минута:000–59
  2. 3Час03:xx0–23
  3. *День месяцалюбой день1–31
  4. *Месяцкаждый месяц1–12, JAN–DEC
  5. 1-5День неделипн–пт0–7, SUN–SAT
Простыми словами

В 03:00, с понедельника по пятницу.

Ближайшие 10 запусков

    Серверы часто запускают cron в UTC. Проверьте командой date или timedatectl на сервере.

    Ближайшие 7 дней по часам

    Как пользоваться

    4 шага
    1. Вставьте строку из crontab: пять полей, сокращение вроде @daily или всю строку вместе с командой.
    2. Прочитайте фразу. Поставьте курсор на поле, и оно подсветится в разборе.
    3. Проверьте предупреждения. Они ловят классические ошибки: * в минутах, 31-е число и правило OR для дня месяца и дня недели.
    4. Посмотрите ближайшие 10 запусков. Переключитесь на UTC, если сервер живёт в UTC, а большинство живёт.

    Что он делает

    1 мин чтения

    Cron читает пять полей слева направо: минута, час, день месяца, месяц, день недели. 0 3 * * 1-5 значит 03:00 с понедельника по пятницу. В каждом поле можно писать числа, диапазоны (1-5), списки (1,15), шаги (*/15), а для месяцев и дней недели ещё и имена вроде JAN и MON. Воскресенье — это и 0, и 7.

    Инструмент следует Vixie cron и cronie — тем cron, что стоят на большинстве Linux-серверов. Он понимает и выражения из шести полей с секундами (node-cron, Quartz, Spring), и синтаксис Quartz ? L W #, и предупреждает, если строка не сработает в обычном crontab.

    Ближайшие запуски считаются в браузере, в вашем часовом поясе или в UTC. Переход на летнее время учитывается так, как его видит браузер: время, попавшее в «пропавший» час, сдвигается на первую минуту после него и помечается. Настоящие cron ведут себя здесь по-разному, так что не ставьте задачи между 02:00 и 03:00, если сервер живёт по местному времени.

    Большинство cron-задач на небольших сайтах скучные и важные: продление сертификатов через certbot, резервные копии перед переносом аккаунта cPanel и запуск задач WordPress настоящим cron вместо WP-Cron, как в чек-листе безопасности WordPress. Сломанный cron не выдаёт ошибок. Он просто перестаёт что-то делать.

    Вопросы

    5 вопросов

    Что значит */5 в cron?

    */5 — это каждое пятое значение, начиная с наименьшего. В поле минут это :00, :05, :10 и так далее, то есть каждые 5 минут. Шаг начинается заново каждый час, поэтому шаги, на которые 60 не делится (например, */7), оставляют короткий промежуток в начале часа. 10-30/5 ограничивает тот же шаг минутами с 10-й по 30-ю.

    Почему cron-задача запустилась не в тот день?

    Скорее всего, из-за правила дня месяца и дня недели. Если заданы оба поля, cron запускает задачу, когда совпадает любое из них. 0 0 1 * 1 сработает 1-го числа и в каждый понедельник, а не только в понедельник, выпавший на 1-е. Поле, которое начинается с *, например */2, считается незаданным и переключает правило на «должны совпасть оба». Для «первого понедельника» поставьте 1-7 в день месяца, * в день недели и проверяйте день недели в самой команде.

    В каком часовом поясе работает cron?

    В системном часовом поясе сервера, если только ваш cron не поддерживает CRON_TZ (cronie поддерживает) или задача сама не задаёт TZ. Многие серверы живут в UTC, так что 0 3 * * * может сработать в 06:00 по вашему времени. Проверьте командой date или timedatectl на сервере и воспользуйтесь переключателем UTC выше.

    Почему команда работает в терминале, но не в cron?

    Cron запускает её с минимальным окружением: короткий PATH, без алиасов, часто другой shell, а % означает перевод строки. Пишите полные пути вроде /usr/bin/php, экранируйте % как \% и отправляйте вывод в лог (>> /tmp/job.log 2>&1), чтобы видеть, что пошло не так.

    Как посмотреть и отредактировать свои задачи cron?

    crontab -l показывает ваши задачи, а crontab -e открывает их в редакторе. У каждого пользователя свой crontab, поэтому задача, добавленная от root, под вашим пользователем не видна: sudo crontab -l покажет задачи root. Системные задачи лежат ещё в /etc/crontab и /etc/cron.d/, и в этих строках между расписанием и командой есть лишнее поле: пользователь, от имени которого запускать. На хостинге без доступа к shell ищите в cPanel Задания cron (Cron Jobs).

    Ещё инструменты на стене