Cron-expressieparser
Vijf velden gescheiden door spaties, of een verkorte notatie zoals @daily.
Je erft een crontab vol regels als 0 */2 * * 1-5 en 30 3 * JAN,JUL 1. Deze parser schrijft elk veld uit tot precies de waarden die het selecteert, dus in plaats van te gokken wat */2 dekt, zie je de twaalf uren die eruit komen en het aantal ernaast. Je krijgt er de genormaliseerde vorm met 5 velden bij, een waarschuwing zodra de expressie een bekende valkuil is, en de volgende 5 uitvoeringstijden, berekend in je eigen tijdzone.
Zo ontleed je een cron-expressie
-
1
Plak de expressie
Een regel met 5 velden (`* * * * *`): minuut, uur, dag van de maand, maand en dag van de week. Verkorte notaties als `@daily` werken ook.
-
2
Lees de uitgeschreven velden
Elk veld staat er met de waarden die het selecteert en hoeveel dat er zijn, dus `*/2` in het uurveld toont 0, 2, 4 en de negen andere die eronder vallen.
-
3
Controleer de volgende uitvoeringen
5 komende uitvoeringstijden, in je browser berekend vanuit je eigen tijdzone. Kloppen ze niet met je bedoeling, dan scherp je de expressie aan.
-
4
Lees de waarschuwingen
De parser markeert de valkuilen: allebei de dagvelden ingevuld, een datum die nooit voorkomt, of een operator die standaard cron niet kent.
Wat elk veld allemaal selecteert
Een veld is niet één waarde, het is een verzameling. Weten hoe groot die verzameling is, beantwoordt meestal meteen de vraag waarmee je kwam.
| Veld | Bereik | * selecteert |
Opmerkingen |
|---|---|---|---|
| Minuut | 0-59 | 60 waarden | De meest voorkomende oorzaak van taken die op hol slaan |
| Uur | 0-23 | 24 waarden | 24-uursklok, nooit 1-12 |
| Dag van de maand | 1-31 | 31 waarden | Korte maanden slaan de ontbrekende dagen gewoon over |
| Maand | 1-12 | 12 waarden | JAN tot en met DEC mag ook |
| Dag van de week | 0-7 | 7 waarden | 0 en 7 zijn allebei zondag |
Operatoren binnen een veld: * voor elke waarde, 1,5,10 voor een lijst, 1-5 voor een bereik, */15 voor een stap geteld vanaf het begin van het bereik en 0-45/15 voor een stap binnen een bereik.
Namen en verkorte notaties worden geaccepteerd
Namen van maanden en dagen van de week worden herkend en uitgeschreven tot de nummers waar ze voor staan, dus 30 3 * JAN,JUL 1 meldt maand 1, 7 en dag van de week 1. De verkorte notaties worden nog vóór al het andere uitgeschreven tot hun vorm met 5 velden:
| Verkorte notatie | Wordt uitgeschreven als | Betekenis |
|---|---|---|
@yearly, @annually |
0 0 1 1 * |
Middernacht op 1 januari |
@monthly |
0 0 1 * * |
Middernacht op de 1e |
@weekly |
0 0 * * 0 |
Middernacht op zondag |
@daily, @midnight |
0 0 * * * |
Elke dag om middernacht |
@hourly |
0 * * * * |
Aan het begin van elk uur |
@reboot wordt ook herkend, maar heeft geen schema om uit te schrijven: die draait eenmalig bij het opstarten van de machine, dus er valt geen uitvoeringstijd te tonen.
Waarschuwingen die je echt moet lezen
- Allebei de dagvelden ingeperkt.
0 0 1 * MONbetekent niet “de 1e, maar alleen als het een maandag is”. Standaard cron behandelt de twee dagvelden als OF zodra ze allebei zijn ingeperkt, dus die regel draait op de 1e van elke maand én op elke maandag. De parser waarschuwt daarvoor, en de uitvoeringstijden volgen diezelfde OF-regel. - Een datum die nooit voorkomt.
0 0 30 2 *vraagt om 30 februari. De expressie is syntactisch geldig en cron accepteert hem, maar hij wordt nooit uitgevoerd. De parser zegt dat erbij, in plaats van je een lege lijst zonder uitleg voor te schotelen. - Quartz-operatoren.
L(laatste),W(dichtstbijzijnde werkdag),#(de zoveelste weekdag van de maand) en?zijn uitbreidingen van Quartz, geen standaard crontab. In een regel met 5 velden worden ze herkend en gemarkeerd, en het veld laat zien dat het om een Quartz-operator gaat in plaats van om een lijst met waarden. Er worden geen uitvoeringstijden berekend, want standaard cron zou die regel überhaupt niet draaien.
Wat meteen wordt afgewezen
- Het verkeerde aantal velden. Een Quartz-regel met 6 velden (met seconden) of 7 velden (met jaartal) wordt afgewezen op het aantal velden.
- Waarden buiten het bereik, bijvoorbeeld minuut 75 of maand 13.
- Een aflopend bereik zoals
5-1. - Een stapgrootte van 0, zoals
*/0.
Elke afwijzing noemt het veld en de waarde die de fout veroorzaakt, zodat je één ding aanpast in plaats van de hele regel opnieuw te schrijven.
Tijdzone
De volgende uitvoeringstijden worden in je browser berekend, in de tijdzone die op je apparaat staat ingesteld. Een crontab draait in de tijdzone van de machine waarop hij staat, dus als die server op UTC staat en jij niet, verschuif de tijden dan voordat je ze vergelijkt.
Veelgestelde vragen
Niet als schema. Een Quartz-regel met 6 velden (met seconden) of 7 velden (met jaartal) wordt afgewezen op het aantal velden. Quartz-operatoren binnen een gewone regel met 5 velden (L, W, #, ?) zijn een ander geval: die worden herkend en gemarkeerd, maar er worden geen uitvoeringstijden berekend, want standaard cron zou die regel ook niet draaien.
Meestal komt het door een verschil in tijdzone tussen je apparaat en de server die de crontab draait, of doordat allebei de dagvelden zijn ingevuld. Zijn dag van de maand en dag van de week allebei ingeperkt, dan draait cron zodra één van de twee overeenkomt en niet pas als ze allebei kloppen, dus 0 0 1 * MON draait veel vaker dan de meeste mensen denken. Het aantal waarden naast elk veld is de snelste manier om een veld te betrappen dat ruimer is dan je dacht.
Ja. Kubernetes gebruikt de standaardsyntaxis met 5 velden. Het enige waarvoor je moet corrigeren is de klok: een CronJob draait in de tijdzone van het cluster (UTC, tenzij spec.timeZone iets anders zegt), terwijl de tijden hier uit de tijdzone van je eigen apparaat komen.
Het zijn verkorte notaties die Linux-cron accepteert in plaats van vijf velden. @daily (ook @midnight) is 0 0 * * *, @weekly is 0 0 * * 0, @monthly is 0 0 1 * *, @yearly (ook @annually) is 0 0 1 1 * en @hourly is 0 * * * *. Plak er een en de parser laat je de vorm met 5 velden zien waartoe hij uitgeschreven wordt. @reboot is de uitzondering: die draait bij het opstarten, dus heeft geen schema en geen uitvoeringstijden.
Gerelateerde tools
Webpack-configuratiegenerator
Maak een webpack.config.js voor webpack 5 vanuit een kort formulier: stel entry, uitvoermap en mode in en zet TypeScript, Babel, een CSS-loader, HtmlWebpackPlugin en een dev-server aan.
JSON naar PHP-array
Zet JSON om naar een PHP-array-literal met korte syntaxis, associatieve/geïndexeerde arrays en geneste structuren, klaar om in een .php-bestand te plakken.
Telefoonnummers controleren
Controleer de structuur van telefoonnummers per land en bekijk regio, type en E.164-, internationale, nationale en RFC 3966-notatie.
SVG-golfgenerator
Genereer een vloeiende SVG-golfscheiding voor headers en footers met instelbare amplitude, frequentie, kleur en positie boven of onder. Kopieer de SVG-code.
Luhn-algoritme-checker
Controleer de creditcardnummer, IMEI, SIN en andere door Luhn beschermden nummers. Geef een resultaat terug (goed of fout) en toon elke stap van het verdubbelen en het berekenen van de controlesom aan.
Sneltoetsenoverzicht
Zoek gedocumenteerde standaardsneltoetsen voor VS Code, Chrome en Bash met GNU Readline op macOS, Windows en Linux.
Tool beschikbaar in andere talen
- Analyseur d'expressions cron [FR]
- Bộ phân tích biểu thức Cron [VI]
- Parser för cron-uttryck [SV]
- Cron 式パーサー [JA]
- Parser wyrażeń cron [PL]
- Analizador de expresiones cron [ES]
- Analisador de Expressões Cron [PT]
- เครื่องมือแยกวิเคราะห์นิพจน์ Cron [TH]
- Pengurai Ekspresi Cron [ID]
- Cron 표현식 파서 [KO]
- محلل تعبيرات cron [AR]
- Cron-Ausdruck-Parser [DE]
- Cron Expression Parser [EN]
- Parser di espressioni cron [IT]
- Парсер cron-выражений [RU]
- Cron İfadesi Ayrıştırıcı [TR]
- Cron 表达式解析器 [ZH]