Cron-syntax forklarad: Bemstra de 5 falten
Crons fem-falts syntax ar bedragligt enkel men otroligt kraftfull. Den har guiden bryter ner varje falt, varje specialtecken och reglerna som styr hur de kombineras for att skapa scheman fran 'varje minut' till 'andra tisdagen i udda manader kl 03:47'.
De fem falten
Varje Cron-uttryck bestar av exakt fem falt i en specifik ordning: Minut Timme Dag-i-manaden Manad Veckodag. Att forsta vad varje falt styr och vilket giltigt intervall det har ar oumbarligt for att konstruera korrekta uttryck.
Minutfaltet (0-59) styr vid vilken minut i timmen jobbet kors. "0" betyder vid hel timme (:00), "30" betyder vid halv timme (:30), och "*" betyder varje minut. Detta ar den mest detaljerade kontrollen Cron erbjuder - du kan inte schemalägga jobb i sub-minutintervall med standard-Cron.
Timmefaltet (0-23) anvander 24-timmarsformat. "0" ar midnatt, "12" ar middag och "23" ar 23:00. Det finns ingen AM/PM-notation; Cron forstar endast 24-timmarsformat. Om du vill ha 14:00, anvand "14". Om du vill ha 02:00, anvand "2" (eller "02", ledande nollor ar valfria och ignoreras).
Dag-i-manaden-faltet (1-31) anger pa vilken dag(ar) i manaden som ska koras. "1" ar den forsta i manaden, "15" ar mitten och "31" ar den sista dagen for manader med 31 dagar. Var forsiktig med datum 29-31 eftersom inte alla manader har dessa dagar. Ett jobb schemalagt for den 31:a kommer inte att kora i manader med endast 30 dagar.
Manadsfaltet (1-12) styr i vilka manader jobbet kors. "1" ar januari, "12" ar december. Vissa Cron-implementationer accepterar tremanaders forkortningar som "jan" eller "JAN", men numeriska varden stodjs universellt och rekommenderas for portabilitet.
Veckodagsfaltet (0-6 eller 1-7, beroende pa implementation) anger pa vilka veckodagar som ska koras. Standard-Cron anvander 0 for sondag, 1 for mandag till 6 for lordag. Vissa implementationer accepterar ocksa 7 for sondag, vilket gor bade 0 och 7 giltiga for sondag. Liksom manader accepterar vissa Cron-varianter forkortningar (sun, mon, tue etc.), men numeriska varden ar sakrast.
Att forsta hur dessa falt interagerar ar avgorande. Nar bade Dag i manaden och Veckodag ar specificerade (inga jokertecken), kors jobbet nar nagon av villkoren ar sanna (ELLER-logik, inte OCH). Detta forvirrar manga anvandare som forvantar sig att "0 0 13 * 5" betyder "pa fredag den 13:e", nar det faktiskt betyder "den 13:e i varje manad ELLER varje fredag".
Specialtecken och operatorer
Kraften i Cron kommer fran specialtecken som later dig uttrycka komplexa scheman kortfattat. Asterisken (*) betyder "varje mojligt varde" och ar det vanligaste specialtecknet. I minutfaltet betyder * varje minut (0-59). I manadsfaltet betyder * varje manad (1-12).
Komma-operatorn (,) listar flera specifika varden. "0,15,30,45" i minutfaltet kors vid :00, :15, :30 och :45 varje timme. "1,15" i dag-i-manaden-faltet kors den 1:a och 15:e. Du kan lista sa manga varden du behover: "1,3,5,7,9,11" for udda dagar.
Bindestrecket (-) skapar intervall av pa varandra foljande varden. "1-5" i veckodagsfaltet betyder mandag till fredag. "9-17" i timmefaltet betyder 9-17. Intervall ar inkluderande - bada andpunkter ingar. "1-3" betyder 1, 2 och 3.
Snedstrecket (/) skapar stegvarden eller intervall. Formatet ar "*/N" eller "intervall/N". "*/5" i minutfaltet betyder "var 5:e minut" (0, 5, 10, 15, ..., 55). "*/2" i timmefaltet betyder "var 2:a timme" (0, 2, 4, 6, ..., 22). Du kan kombinera steg med intervall: "10-50/5" betyder 10, 15, 20, 25, 30, 35, 40, 45, 50.
Dessa operatorer kan kombineras i ett enda falt. "1-5,10,15,20-25" ar giltigt och anger 1 till 5, 10, 15 och 20 till 25. "*/10,55" betyder var 10:e minut plus specifikt vid :55 (alltsa 0, 10, 20, 30, 40, 50, 55).
Vissa avancerade Cron-implementationer stodjer ytterligare specialtecken. "L" (last) i Dag i manaden betyder den sista dagen i manaden. "W" (weekday) hittar narmaste vardag till ett visst datum. "#" anger N:te forekomsten av en dag (som "2:a tisdagen"). Dessa tillagg ar kraftfulla men inte universellt stodda - standard-Cron inkluderar dem inte.
Fragetecknet (?) forekommer i vissa Cron-implementationer som ett alias for "*" i dag-i-manaden- eller veckodagsfalt. Det existerar framst for tydlighet: att anvanda "?" i ett falt och ett specifikt varde i det andra klargor att du endast begransar en dagtyp. Standard-Cron stodjer inte "?"; anvand "*" istallet.
Att forsta operatorsprioritet och kombinationsregler forhindrar syntaxfel. Intervall maste vara stigande (1-5, inte 5-1). Stegvarden maste vara positiva. Listor bor ha varden inom faltets giltiga intervall. De flesta Cron-implementationer validerar inte din syntax forran vid korning, sa testning ar avgorande.
Vanliga syntaxmonster
Att bemstra nagra vanliga syntaxmonster tacker majoriteten av verkliga schemalägggningsbehov. Dessa byggstenar kan kombineras och anpassas for nastan vilket schema som helst.
For enkla regelbundna intervall, anvand stegsyntax: "*/N * * * *" kors var N:te minut. "0 */N * * *" kors var N:te timme (vid minut 0). Detta monster ar vanligt for overvakning, API-polling eller periodiska rensningsuppgifter.
For dagliga jobb vid specifika tider, anvand "M H * * *", dar M ar minuten och H ar timmen. "0 2 * * *" kors kl 02:00 dagligen. "30 14 * * *" kors kl 14:30 dagligen. Jokertecknen i manads- och bada dagfalten betyder "varje dag".
For vardagar-endast jobb, anvand "M H * * 1-5". "0 9 * * 1-5" kors kl 09:00 mandag till fredag. Detta monster ar oumbarligt for arbetsdag-endast uppgifter som att skicka vardagsrapporter eller kora integrationer med externa affarssystem som endast arbetar pa vardagar.
For specifika veckodagar, anvand "M H * * D", dar D ar 0-6. "0 0 * * 0" kors sondagar vid midnatt. "0 18 * * 5" kors fredagar kl 18:00. Flera dagar fungerar ocksa: "0 8 * * 1,3,5" kors mandagar, onsdagar och fredagar kl 08:00.
For manatliga jobb, anvand "M H D * *", dar D ar dagen i manaden. "0 0 1 * *" kors den forsta i varje manad vid midnatt. "0 12 15 * *" kors den 15:e i varje manad kl 12:00, perfekt for mitten-av-manaden bearbetning.
For specifika manader eller arstider, lagg till manadsspecifikation: "M H D M *". "0 0 1 1 *" kors arligen den 1 januari. "0 0 1 1,4,7,10 *" kors kvartalsvis. "0 0 1 6-8 *" kors den forsta i juni, juli och augusti (sommarmanader).
For komplexa scheman, kombinera operatorer kreativt. "0 9-17/2 * * 1-5" kors kl 9, 11, 13, 15 och 17 pa vardagar - var 2:a timme under arbetstid. "*/15 9-17 * * 1-5" kors var 15:e minut, men endast under arbetstid pa vardagar.
Om du behover ett schema som inte passar dessa monster, bryt ner det i komponenter. Tank pa nar det ska kora (tid), hur ofta (intervall), vilka dagar (veckodag), vilka datum (dag i manaden) och vilka manader (manad). Konstruera sedan varje falt enligt dessa begransningar.
Prova verktyget
Crontab Generator