Hoppa till innehåll

Cron uttryckssyntax

Ett cron uttryck är fem fält som beskriver när något ska köras. Varje fält säger vilka värden av sin enhet som är godtagbar, och jobbet körs varje minut där alla fem håller med. Det är hela modellen: det finns ingen uppfattning om varaktighet, ingen "var 90:e minut", och inget nästa-körning-tillstånd sparas någonstans.

Fälten läses från vänster till höger som minut, timme, dag i månad, månad, dag i vecka. Exemplen längst ned är de som folk verkligen söker efter, och vart och ett av dem analyseras av denna webbplats egen cron parser innan denna sida är byggd.

Det sista avsnittet listar syntax som ser ut som cron men inte accepteras här: Quartz och Jenkins tillägg, och sexfältiga formen med sekunder. De är värda att känna igen, för ett kopierat uttryck som använder en kommer helt enkelt att misslyckas.

De fem fälten

7

En cron rad är fem fält åtskilda av mellanslag, sedan kommandot. Varje fält måste finnas; det finns inget sätt att utelämna ett.

UttryckIntervallBetydelse
* * * * *min hod dom mes dowDe fem fälten i ordning: minut, timme, dag i månad, månad, dag i veckaFem stjärnor betyder varje minut av varje dag — det löst möjliga uttrycket.
minute0-59Första fältet
hour0-23Andra fältet, på ett 24-timmarsklocka
day of month1-31Tredje fältetEn dag som inte finns i en given månad hoppas helt över — 31 körs sju gånger om året, inte tolv.
month1-12Fjärde fältet
day of week0-7Femte fältet, söndag förstBåde 0 och 7 betyder söndag, vilket är varför intervallet körs till sju snarare än sex.
0 5 13 * 5När båda dagfälten är begränsade, körs cron på någon av dem — inte bådaDetta körs på 13:e och varje fredag, så det är inte "fredag den 13:e". Det är den enda regeln i cron som överraskar alla.

Operatorer

10

Samma fyra operatorer fungerar i alla fält; bara siffrorna de accepterar ändras.

UttryckIntervallBetydelse
*Varje värde fältet tillåter
1,15,30En lista av individuella värden
9-17Ett inkluderande intervall
*/15Varje n:te värde över hela fältet*/15 i minutfältet betyder :00, :15, :30 och :45 — det räknas från intervallbotten, inte från nu.
9-17/2Varje n:te värde inom ett intervall
5/10Varje n:te värde från en startpunkt till intervallslut
0,30 9-17 * * 1-5Operatorer kombineras fritt, i valfritt fältPå halvtimmen, mellan nio och fem, måndag till fredag.
JAN-DEC1-12Månadsnamn, tre bokstäver, skiftlägesokänsligt
SUN-SAT0-6Dagnamn, tre bokstäver, skiftlägesokänsligt
70Söndag, skriven på andra sättet

Korta genvägar

7

Sju namn som ersätter ett helt uttryck. De är en bekvämlighet för crontab filformatet snarare än fältgrammatiken, så en schemaläggare som läser cron strängar behöver inte acceptera dem.

UttryckIntervallBetydelse
@hourly0 * * * *Vid toppen av varje timme
@daily0 0 * * *En gång om dagen vid midnatt
@midnight0 0 * * *Samma som @daily
@weekly0 0 * * 0En gång per vecka, söndag vid midnatt
@monthly0 0 1 * *Den första i månaden vid midnatt
@yearly0 0 1 1 *Den första januari vid midnatt
@annually0 0 1 1 *Samma som @yearly

Praktiska exempel

14

Läs en från höger till vänster när den slutar ge mening: det grovaste fältet är till höger, och det avgör vilka dagar de finare redan får konsulteras.

UttryckIntervallBetydelse
* * * * *Varje minut
*/5 * * * *Var femte minut
0 * * * *Varje timme, på klockan
0,30 * * * *Var halvtimme
0 3 * * *Varje dag klockan 03:00
0 9,17 * * *Två gånger om dagen, klockan 09:00 och 17:00
*/15 9-17 * * 1-5Var kvart under kontorstimmar på arbetsdagar
0 8 * * 1-5Arbetsdagar klockan 08:00
0 10 * * 6,0Lördagar och söndagar klockan 10:00
30 7 * * MONMåndagar klockan 07:30
0 0 1 * *Midnatt den första varje månad
0 0 28-31 * *Varje dag i månadens sista sträckaStandard cron har ingen "sista dag i månaden". Detta körs upp till fyra gånger istället; ett skript som kontrollerar datumet och avslutas tidigt är det vanliga fixet.
0 0 1 1,4,7,10 *Midnatt första dagen varje kvartal
0 0 1 1 *En gång per år, vid början av 1 januari

Tillägg denna webbplats inte accepterar

6

Quartz, Jenkins och vissa molnschemaläggare lägger till dessa. De listas så du känner igen dem i någon annans crontab — parsern på denna webbplats avvisar var och en, liksom cron skeppas med Linux.

UttryckIntervallBetydelse
?"Inget specifikt värde", i det dagfältet den andra redan begränsar
LSista dagen i månaden, eller sista given veckodag
15WVardagen närmast 15:e
FRI#3Tredje fredagen i månaden
*/30 * * * * *Ett sjätte fält för sekunder, frammeSex fält, inte fem. Quartz och flera språkbibliotek använder denna form; crontab filen gör det inte.
@rebootKör en gång när maskinen startarVerklig i crontab, men det är inte ett schema — det finns ingen nästa körning att beräkna, vilket är varför parsern här avvisar det.

FAQ

Varför kördes mitt "fredag den 13:e" jobb varje fredag?
Eftersom när både dag-i-månad och dag-i-vecka fälten är begränsade, behandlar cron dem som antingen/eller snarare än och. 0 5 13 * 5 körs på 13:e och varje fredag. Att få ett verkligt fredag den 13:e jobb kräver en datumkontroll inuti skriptet själv.
Betyder */5 "fem minuter från nu"?
Nej. Steg räknas från botten av fältets intervall, inte från det ögonblick du installerar jobbet, så */5 i minutfältet betyder :00, :05, :10 och så vidare oavsett när det skrevs.
Vilken tidszon använder cron?
Systemets, om inte crontab ställer in CRON_TZ eller TZ högst upp. Detta spelar roll två gånger om året: ett jobb planerat inuti den timme som en sommartidöverförflyttning hoppar över körs inte, och ett inuti den timme som upprepas kan köra två gånger.
Är 0 samma som 7 i dag-i-vecka fältet?
Ja, båda är söndag. Dublikatet finns så att ett intervall som 1-7 täcker måndag till söndag kan skrivas naturligt, vilket ett 0-6 fält inte kan uttrycka i ett intervall.
Var kan jag testa ett uttryck?
Cron parsern på denna webbplats tar ett uttryck och visar nästa körningar på vanlig svenska, lokalt i din webbläsare. Byggaren bredvid går åt andra hållet: välj ett schema och det skriver uttrycket.