Генератор cron-выражений
Соберите расписание из пяти полей: сервис проверит синтаксис, объяснит его по-русски и покажет ближайшие запуски по Москве. Готовое выражение можно сразу вставить в crontab.
0 3 * * *
Ближайшие запуски по Москве
Что такое cron
Cron — планировщик задач в Unix-подобных системах. Он каждую минуту проверяет список правил и запускает команды, время которых совпало с текущим. На хостингах cron используют для резервных копий, очистки кэша, парсинга по расписанию и очередей Laravel.
Синтаксис: пять полей
Стандартное выражение состоит из пяти полей, разделённых пробелами. Порядок всегда один и тот же — от самого частого к самому редкому.
| Поле | Что задаёт | Допустимые значения |
|---|---|---|
| 1 | Минуты | 0–59 |
| 2 | Часы | 0–23 |
| 3 | День месяца | 1–31 |
| 4 | Месяц | 1–12 или jan–dec |
| 5 | День недели | 0–7, где 0 и 7 — воскресенье |
В каждом поле работают одни и те же конструкции:
*— любое значение;5— конкретное значение;1-5— диапазон;1,15,30— список;*/10— каждый десятый шаг;1-5/2— диапазон с шагом.
Примеры
| Выражение | Когда запускается |
|---|---|
* * * * * | каждую минуту |
*/15 * * * * | каждые 15 минут |
0 3 * * * | каждый день в 03:00 |
0 9 * * 1-5 | по будням в 09:00 |
0 0 1 * * | 1-го числа каждого месяца в 00:00 |
0 4 * * 0 | по воскресеньям в 04:00 |
Cron на хостинге
В панели управления задача добавляется строкой: расписание, затем команда.
Для Laravel указывайте полный путь к artisan и явно вызывайте
php8.3 — версия по умолчанию может отличаться.
0 3 * * * php8.3 /home/USER/site.ru/artisan schedule:run >> /home/USER/cron.log 2>&1
Лог лучше писать в файл, а не в /dev/null: иначе причину сбоя
не увидеть. Если команда содержит %, в crontab его нужно
экранировать обратным слешем.
Частые ошибки
- Сервер работает по UTC, а расписание составлено по Москве — задача сдвигается на три часа.
- Указан относительный путь к PHP или
artisan— cron запускается не из каталога проекта. - Нет прав на запись в файл или каталог, куда пишет задача.
- Символ
%не экранирован — cron обрезает команду. - Задача с
*/5в минутах и одновременно ограничением по дню недели описана неверно: поля комбинируются, а не заменяют друг друга.
Вопросы
- В каком часовом поясе работает cron?
- В часовом поясе сервера. Проверьте его командой
date: если сервер по UTC, для 03:00 по Москве ставьте 00:00. - Чем отличаются выражения из 5 и 6 полей?
- В классическом crontab пять полей. Шестое поле с секундами встречается в Quartz и некоторых планировщиках, но не в стандартном cron.
- Почему задача не запускается?
- Проверьте путь к PHP, права на файлы, полный путь к
artisanи символ%. Временно пишите вывод в лог, а не в/dev/null.