Zbuduj wyrażenie cron

zbuduj wyrażenie cron z pól UI lub presetu (co minutę, co godzinę, codziennie, co tydzień...)

Dlaczego wizualny cron builder?

Wyrażenie cron mieści się w pięciu polach, a mimo to pozostaje jednym z największych generatorów błędów w produkcji. Ile razy programista pisał 0 0 * * 1 myśląc „każdy poniedziałek", nie pamiętając, że 1 może oznaczać niedzielę w zależności od implementacji? Ile razy mylono */15 z 15? Cron builder odpowiada na tę potrzebę: wizualnie skomponować wyrażenie crontab, na podstawie typowych presetów lub indywidualnych pól, i uzyskać finalne wyrażenie gotowe do wklejenia w crontab Linux, Kubernetes CronJob lub harmonogram GitHub Actions.

Narzędzie jest odwrotnością naszego dekodera cron: tam gdzie konwerter bierze wyrażenie i pokazuje kolejne uruchomienia, builder bierze ludzkie wybory i produkuje odpowiadające wyrażenie cron.

Jak to działa

Interfejs graficzny oferuje dwa uzupełniające się tryby komponowania:

  • Tryb preset: selektor częstotliwości (every minute, every hour, every day, every week, every month, every year, custom), który natychmiast generuje prawidłowe wyrażenie cron.
  • Tryb pól: pięć edytowalnych pól (minuta, godzina, dzień miesiąca, miesiąc, dzień tygodnia), w których swobodnie wpisujesz *, liczbę całkowitą, zakres 1-5, listę 1,15,30 lub krok */15.

Builder aktualizuje wyrażenie w czasie rzeczywistym i wyświetla zwięzły odczyt ludzki („codziennie o 3", „co 15 minut"), który służy jako zabezpieczenie: jeśli zdanie nie pasuje do twojej intencji, wyrażenie jest prawdopodobnie błędne.

Pięć pól cron, w jasny sposób

Standardowe wyrażenie cron zawiera pięć pól oddzielonych spacjami:

minute  heure  jour-du-mois  mois  jour-de-la-semaine
*       *      *             *     *
  • minuta (0 do 59);
  • godzina (0 do 23);
  • dzień miesiąca (1 do 31);
  • miesiąc (1 do 12 lub skróty Jan, Feb itp.);
  • dzień tygodnia (0 do 7, 0 i 7 oznaczają niedzielę w większości implementacji).

Każde pole akceptuje kilka form: * (wszystkie wartości), konkretną liczbę całkowitą (5), listę (1,3,5), zakres (9-17), krok (*/15 co 15 wartości) lub kombinację (0-30/5).

Typowe przypadki użycia

  • Programista uczący się cron: zwizualizowanie, jak każde pole oddziałuje, bez ryzykowania błędnym wyrażeniem w produkcji.
  • Zapracowany sysadmin: wygenerowanie w kilka sekund harmonogramu dla cron Linux, Kubernetes CronJob lub zadania Ansible bez ponownego czytania man page.
  • Programista bez doświadczenia POSIX: wyprodukowanie prawidłowego wyrażenia crontab dla Symfony Scheduler, Laravel Scheduler lub node-cron bez znajomości historycznej składni.
  • DevOps w trakcie review: szybkie sprototypowanie wyrażenia do zaproponowania w pull request, następnie zweryfikowanie go za pomocą dekodera cron.
  • Migracja legacy: przeformułowanie historycznego wyrażenia cron za pomocą buildera, aby upewnić się co do semantyki przed wypchnięciem go gdzie indziej.

Typowe presety

Wybór presetu nadpisuje indywidualne pola i produkuje odpowiadające wyrażenie:

  • Co minutę: * * * * *. Do uniknięcia w produkcji poza szczególną potrzebą.
  • Co godzinę: 0 * * * *. Na początku każdej godziny.
  • Codziennie: 0 0 * * *. O północy.
  • Co tydzień: 0 0 * * 0. W każdą niedzielę o północy.
  • Co miesiąc: 0 0 1 * *. 1. dnia miesiąca o północy.
  • Co rok: 0 0 1 1 *. 1 stycznia o północy.

Typowe wzorce do poznania

Wyrażenie Odczyt ludzki
0 0 * * * Codziennie o północy
*/15 * * * * Co 15 minut
0 9 * * 1-5 W każdy dzień roboczy o 9
0 0 1 * * 1. dnia miesiąca o północy
0 0 * * 0 W każdą niedzielę o północy
*/5 9-17 * * 1-5 Co 5 minut w godzinach pracy
0 3 * * * Codziennie o 3 rano
30 2 1,15 * * 1. i 15. miesiąca o 2:30

Komponowanie własnego wyrażenia

Dla bardziej specyficznych przypadków asystent udostępnia pięć pól w swobodnym wprowadzaniu. Kilka przydatnych przykładów:

  • Codziennie o 3 rano: minuta=0, godzina=3, pozostałe pola *.
  • Co 15 minut: minuta=*/15, pozostałe pola *.
  • Od poniedziałku do piątku o 9: minuta=0, godzina=9, dzień-tygodnia=1-5.
  • 1. i 15. każdego miesiąca w południe: minuta=0, godzina=12, dzień-miesiąca=1,15.
  • Co 5 minut między 9 a 17: minuta=*/5, godzina=9-17.

Jak korzystać z cron builder

  1. Wybierz preset (every minute, every hour, every day, every week, every month, every year), który odpowiada podstawie twojej potrzeby.
  2. Dopracuj w razie potrzeby, edytując bezpośrednio pięć pól (minuta, godzina, dzień miesiąca, miesiąc, dzień tygodnia).
  3. Przeczytaj ludzkie zdanie wygenerowane przez narzędzie, aby potwierdzić intencję.
  4. Skopiuj wyprodukowane wyrażenie cron przyciskiem kopiowania.
  5. Zweryfikuj harmonogram za pomocą naszego dekodera cron, który oblicza kolejne rzeczywiste daty uruchomienia.
  6. Wklej wyrażenie do swojego crontab Linux, Kubernetes CronJob, Symfony Scheduler lub workflow GitHub Actions.

Klasyczne pułapki

  • Dzień miesiąca i dzień tygodnia połączone: jeśli oba nie są *, zachowanie różni się w zależności od implementacji. Linux/Vixie cron stosuje LUB, nowoczesne biblioteki mają czasem inne zachowanie. Do unikania.
  • Dzień 1 = poniedziałek czy niedziela?: w zależności od kraju i konwencji. Większość cron Unix uważa niedziela=0 i sobota=6. Sprawdź swój scheduler.
  • Strefa czasowa: cron Unix domyślnie używa strefy serwera. Aplikacyjne scheduler (Symfony Scheduler, Quartz) często pozwalają ustawić dedykowaną strefę.
  • Brakująca minuta: * * * * * wykonuje zadanie co minutę, co rzadko jest tym, czego chcemy. Pamiętaj o ustawieniu precyzyjnego wyzwalacza (0) dla zadań godzinnych.

Odczyt ludzki i wyjście

Poza wyrażeniem cron narzędzie oferuje zwięzły odczyt ludzki („codziennie o północy", „co 5 minut"). To zabezpieczenie: jeśli zdanie nie odpowiada twojej intencji, wyrażenie jest prawdopodobnie błędne. Dla złożonego przypadku użyj następnie naszego dekodera cron, aby obliczyć kolejne rzeczywiste daty uruchomienia.

Najczęściej zadawane pytania

Czy mogę ręcznie edytować wyrażenie po użyciu interfejsu?

Tak. Builder nie jest trybem wyłącznym: pięć pól pozostaje edytowalnych w dowolnym momencie. Możesz wyjść od presetu, następnie dostosować pole ręcznie, aby uzyskać dopasowane do potrzeb wyrażenie crontab. Odczyt ludzki jest natychmiast przeliczany.

Czy narzędzie obsługuje format Quartz z 6 polami (z sekundami)?

Nie: format z 5 polami to standard Unix i wspólna baza większości schedulerów (Linux crontab, Kubernetes CronJob, GitHub Actions, GitLab CI, Symfony Scheduler, Laravel Scheduler). Quartz (Java) akceptuje dodatkowe pole na sekundy i specyficzne symbole (?, L, W, #), ale ta potrzeba pozostaje rzadka.

Jak obsługiwana jest strefa czasowa?

Builder produkuje neutralne wyrażenie cron: to silnik wykonujący zadanie stosuje swoją strefę czasową. W crontab Linux to TZ serwera. W GitHub Actions to UTC. W Kubernetes 1.27+ możesz ustawić spec.timeZone w manifeście. Symfony Scheduler i Quartz udostępniają dedykowaną strefę na zadanie.

Jak zweryfikować moje wyrażenie bez uruchamiania w produkcji?

Użyj naszego dekodera cron. Oblicza on N kolejnych uruchomień od bieżącej chwili, bez uruchamiania żadnego zadania. To najlepszy sposób na potwierdzenie, że wyrażenie cron dobrze odpala o przewidzianej godzinie przed wdrożeniem.

Jaki jest związek z Symfony Scheduler?

Symfony Scheduler akceptuje wyrażenia cron z 5 polami przez Schedule::cron('0 3 * * *', ...) . Wyprodukowane przez builder wyrażenie może więc zostać wklejone takie, jakie jest. Tak samo dla Laravel Scheduler (->cron('...')), node-cron, Hangfire i Airflow.

Czy trzeba prefiksować polecenie w systemowym crontab?

Tak, w /etc/crontab trzeba podać użytkownika (0 3 * * * www-data /usr/bin/php ...), podczas gdy crontab -e per użytkownik to pomija. Samo wyrażenie pozostaje identyczne.

Przykładowe zapytanie

curl -X POST https://cdrn.fr/api/v1/tools/cron-builder/execute \
  -H "Content-Type: application/json" \
  -d '{"preset":"none","minute":"*","hour":"*","day_of_month":"*","month":"*","day_of_week":"*"}'

Schemat wejściowy

Pole Typ Wymagane Domyślnie
preset choice (none, every_minute, hourly, daily, weekly, monthly, yearly) none
minute string *
hour string *
day_of_month string *
month string *
day_of_week string *

Punkty końcowe

  • GET https://cdrn.fr/api/v1/tools - lista wszystkich dostępnych narzędzi
  • GET https://cdrn.fr/api/v1/tools/cron-builder - zwraca schemat dla tego narzędzia
  • POST https://cdrn.fr/api/v1/tools/cron-builder/execute - uruchamia to narzędzie z payloadem JSON