Cron израз: генератор и тест
Съставете cron израз поле по поле, прочетете го с прости думи, вижте следващите изпълнения във всяка часова зона и го преобразувайте за systemd или Quartz.
С прости думи
Зададени са и ден от месеца, и ден от седмицата: класическият cron се изпълнява, когато съвпадне ЕДНОТО от двете (не и двете).
Конструктор
| Поле | Режим | Стойност |
|---|---|---|
| Секунда0–59 | ||
| Минута0–59 | ||
| Час0–23 | ||
| Ден от месеца1–31, L | ||
| Месец1–12 или JAN–DEC | ||
| Ден от седмицата0–7 (0 и 7 = неделя) или SUN–SAT |
Следващи изпълнения
Други формати
- ред за crontab
- systemd OnCalendar=
- Quartz / Spring
- AWS EventBridge
Как да съставите cron израз
- Въведете или поставете израз в Cron израз или изберете такъв от Шаблони. Макроси като
@dailyили@weeklyсъщо се приемат. - Или използвайте Конструктор: за всяко поле изберете Режим (Всеки, На всеки N, Конкретни стойности, Диапазон или Друго) и попълнете Стойност. Изразът се обновява, докато работите, а промяната на израза обновява конструктора.
- Отметнете Добави поле за секунди (6 полета), ако вашият планировчик поддържа секунди.
- Прочетете графика С прости думи (на езика на страницата, когато библиотеката за описание го поддържа), после проверете списъка Следващи изпълнения. Изберете Часова зона на сървъра, който изпълнява задачата, и Колко изпълнения да се покажат.
- Копирайте израза с Копирай или използвайте някой от Други формати.
Грешките се обясняват поле по поле, например „Минута: 61 е извън диапазона (0–59)“, така че знаете точно какво да поправите.
Петте полета на cron
Стандартен (Vixie) cron ред има пет полета, после командата:
| Поле | Допустими стойности |
|---|---|
| Минута | 0–59 |
| Час | 0–23 |
| Ден от месеца | 1–31 |
| Месец | 1–12 или JAN–DEC |
| Ден от седмицата | 0–7 (0 и 7 са неделя) или SUN–SAT |
Всяко поле приема * (всяка стойност), списък 1,15, диапазон 9-17, стъпка */15 (на всеки 15 единици) или диапазон със стъпка 0-30/10. Така */15 9-17 * * 1-5 означава на всеки 15 минути от 9:00 до 17:45, от понеделник до петък.
Едно правило изненадва мнозина: когато са ограничени и Ден от месеца, и Ден от седмицата, класическият cron се изпълнява, когато съвпадне което и да е от двете. 0 0 13 * 5 се изпълнява всяко 13-о число и всеки петък, а не само в петък 13-о. В такъв случай инструментът показва предупреждение.
Следващи изпълнения и часови зони
Cron ползва часовника на машината или настройката CRON_TZ/TZ на crontab. Списъкът Следващи изпълнения се изчислява за избраната от вас часова зона, включително смените на лятно часово време: при пролетната смяна задача, зададена за 2:30, може да бъде пропусната, а наесен може да се изпълни веднъж или два пъти според реализацията. За задачи, които трябва да се изпълнят точно веднъж, предпочитайте часове извън 1:00–3:00 или използвайте UTC.
Vixie cron, systemd таймери, Quartz и AWS
- systemd таймерите ползват
OnCalendar=с различен синтаксис:Mon..Fri *-*-* 09..17:00/15:00. Условията за ден от седмицата и дата се комбинират с И, а не с ИЛИ, така че някои cron изрази нямат точен еквивалент. - Quartz и Spring поставят поле за секунди първо и може да добавят поле за година. Едно от двете полета за ден трябва да е
?, а Quartz номерира дните от седмицата от 1 до 7 започвайки от неделя, за разлика от 0–6 в cron. Инструментът записва дните с имена (MON-FRI), за да избегне този капан. - AWS EventBridge използва
cron(минути часове ден месец ден-от-седмицата година): шест полета, без секунди,?в едното поле за ден и година накрая.
Стандартният cron няма поле за секунди. Формата с 6 полета със секунди се поддържа от много библиотеки (node-cron, Spring, Quartz), но не и от системния crontab.
Често задавани въпроси
Как да изпълнявам задача на всеки 5 минути?
Използвайте */5 * * * *. Задачата се изпълнява в минути 0, 5, 10… на всеки час.
Как да изпълня задача в последния ден на месеца?
Много планировчици приемат L в полето за ден от месеца: 0 18 L * *. При чист Vixie cron изпълнявайте ежедневно на 28–31 число и проверявайте в скрипта дали утре е 1-во число.
Какво прави @reboot?
Изпълнява командата веднъж, когато cron демонът стартира. Няма график, затова инструментът не може да изброи часове на изпълнение за него.
Защо задачата ми не се изпълнява в показания час?
Проверете часовата зона на сървъра, crontab на потребителя спрямо /etc/crontab (който има допълнително поле за потребител) и PATH: cron стартира с минимална среда.
0 или 7 е неделя?
И двете. В полето за ден от седмицата 0 и 7 означават неделя, 1 е понеделник, а 6 е събота.
Сродни инструменти
- Конвертор на Unix времеви печат Преобразувайте Unix времеви печат в секунди или милисекунди в четими дати по местно време, UTC и ISO 8601 и обратно – всяка дата в epoch време.
- Преобразуване на часови зони Преобразувайте дата и час от една часова зона в няколко други наведнъж с автоматично лятно часово време. Търсете всяка IANA зона или град.
- Chmod калкулатор Преобразувайте правата на Unix файлове между отметки, осмичен (755) и символен (rwxr-xr-x) запис, със setuid, setgid, sticky бит и готови chmod команди.