Utilia

Cron-generator

Bygg ett cron-uttryck fält för fält, läs det i klartext, se nästa körningar i valfri tidszon och konvertera det till systemd, Quartz eller AWS.

Byggare

FältLägeVärde
Minut0–59
Timme0–23
Dag i månaden1–31, L
Månad1–12 eller JAN–DEC
Veckodag0–7 (0 och 7 = söndag) eller SUN–SAT

Så skapar du ett cron-uttryck

  1. Skriv eller klistra in ett uttryck i Cron-uttryck, eller välj ett under Förval. Makron som @daily och @weekly fungerar också.
  2. Eller använd Byggare: välj för varje fält ett Läge (Varje, Var N:e, Specifika värden, Intervall eller Anpassat) och fyll i Värde. Uttrycket uppdateras medan du arbetar, och om du redigerar uttrycket uppdateras byggaren.
  3. Kryssa i Lägg till ett sekundfält (6 fält) om din schemaläggare stöder sekunder.
  4. Läs schemat I klartext (på svenska), och titta sedan på listan Nästa körningar. Välj Tidszon för servern som kör jobbet och Hur många körningar som ska listas. Datumen visas i svenskt format.
  5. Kopiera uttrycket med Kopiera, eller använd något av Andra format.

Fel förklaras fält för fält, till exempel ”Minut: 61 ligger utanför intervallet (0–59)”, så att du vet exakt vad som ska rättas.

De fem cron-fälten

En vanlig cron-rad (Vixie) har fem fält följda av kommandot:

Fält Tillåtna värden
Minut 0–59
Timme 0–23
Dag i månaden 1–31
Månad 1–12 eller JAN–DEC
Veckodag 0–7 (0 och 7 är söndag) eller SUN–SAT

Varje fält accepterar * (alla värden), en lista 1,15, ett intervall 9-17, ett steg */15 (var 15:e enhet) eller ett intervall med steg 0-30/10. */15 9-17 * * 1-5 betyder alltså var 15:e minut från 09:00 till 17:45, måndag till fredag.

En regel överraskar många: när både Dag i månaden och Veckodag är begränsade kör klassisk cron när någon av dem stämmer. 0 0 13 * 5 körs den 13:e varje månad och varje fredag, inte bara fredagen den 13:e. Verktyget visar en varning i det fallet.

Nästa körningar och tidszoner

Cron använder maskinens klocka, eller inställningen CRON_TZ/TZ i crontab-filen. Listan Nästa körningar beräknas för den tidszon du väljer, inklusive övergångar till och från sommartid: när klockan ställs fram på våren kan ett jobb inställt på 02:30 hoppas över, och på hösten kan det köras en eller två gånger beroende på implementationen. För jobb som måste köras exakt en gång är det bäst att välja tider utanför 01:00–03:00 eller använda UTC.

Vixie cron, systemd-timers, Quartz och AWS

  • systemd-timers använder OnCalendar= med en annan syntax: Mon..Fri *-*-* 09..17:00/15:00. Villkor på veckodag och datum kombineras med OCH, inte ELLER, så vissa cron-uttryck saknar exakt motsvarighet.
  • Quartz och Spring har ett sekundfält först och kan lägga till ett årsfält. Ett av de två dagfälten måste vara ?, och Quartz numrerar veckodagarna 1–7 med början på söndag, till skillnad från crons 0–6. Verktyget skriver veckodagarna som namn (MON-FRI) för att undvika den fällan.
  • AWS EventBridge använder cron(minutes hours day month weekday year): sex fält, inga sekunder, ett ? i ett av dagfälten och ett år i slutet.

Standard-cron har inget sekundfält. Formen med 6 fält och sekunder stöds av många bibliotek (node-cron, Spring, Quartz) men inte av systemets crontab.

Vanliga frågor

Hur kör jag ett jobb var 5:e minut?

Använd */5 * * * *. Jobbet körs vid minut 0, 5, 10… varje timme.

Hur kör jag ett jobb sista dagen i månaden?

Många schemaläggare accepterar L i fältet dag i månaden: 0 18 L * *. Med vanlig Vixie cron kör du jobbet dagligen dag 28–31 och testar i skriptet om i morgon är den 1:a.

Vad gör @reboot?

Det kör kommandot en gång, när cron-demonen startar. Det har inget schema, så verktyget kan inte lista några körtider för det.

Varför körs mitt jobb inte vid den visade tiden?

Kontrollera serverns tidszon, om du använder användarens crontab eller /etc/crontab (som har ett extra användarfält), och PATH: cron startar med en minimal miljö.

Är 0 eller 7 söndag?

Båda. I fältet veckodag betyder 0 och 7 söndag, 1 är måndag och 6 är lördag.