Υπολογισμός των επόμενων εκτελέσεων μιας έκφρασης cron
- Πίνακας ελέγχου
- Τεκμηρίωση
- API
Τι είναι η έκφραση cron;
Μια έκφραση cron είναι μια σύντομη συμβολοσειρά που περιγράφει μια επανάληψη με την πάροδο του χρόνου. Το
η μορφή που κληρονομήθηκε από το Unix περιέχει πέντε πεδία που χωρίζονται με κενά: λεπτό, ώρα,
ημέρα του μήνα, μήνας και ημέρα της εβδομάδας. Αυτή η σύνταξη γεννήθηκε με τον δαίμονα
cron από τον Brian Kernighan στη δεκαετία του 1970, και στη συνέχεια γενικεύτηκε από το Vixie cron
(1987) που υποστηρίζεται από όλες τις σύγχρονες διανομές Linux και macOS. Σήμερα, η ίδια σύνταξη είναι
βρέθηκαν στην πλειονότητα των προγραμματιστών cloud (AWS EventBridge, GCP Cloud Scheduler, Azure Logic
Εφαρμογές) και CI/CD (GitHub Actions, GitLab CI, Jenkins).
┌──── λεπτό (0-59)
│ ┌── ώρα (0-23)
│ │ ┌── ημέρα του μήνα (1-31)
│ │ │ ┌── μήνες (1-12 ή ΙΑΝ-ΔΕΚΕΜΒΡΙΟΣ)
│ │ │ │ ┌── ημέρα της εβδομάδας (0-7 ή SUN-SAT, 0 και 7 = Κυριακή)
│ │ │ │ │
* * * * *
Επομένως, μια καλοσχηματισμένη έκφραση cron ορίζει ένα ακριβές πρόγραμμα cron: κάθε πεδίο μπορεί να είναι μια σταθερή τιμή, ένα εύρος, μια λίστα, ένα βήμα ή ένας αστερίσκος που ταιριάζει με τα πάντα. Η συμπαγής έκφραση της crontab έκφρασης είναι η δύναμή της, αλλά είναι και αυτό που την κάνει Ο αποκωδικοποιητής cron είναι απαραίτητος για την οπτική επικύρωση της πρόθεσης. Αυτό είναι το όλο θέμα αυτού του μετατροπέα cron: δημιουργήστε μια ευανάγνωστη εξήγηση cron, συν τη λίστα των επόμενες εκτελέσεις.
Ανατομία έκφρασης cron
Τα πέντε πεδία μοιράζονται μια κοινή γραμματική. Εδώ είναι τα όρια που δέχεται κάθε στήλη του a Τυπική έκφραση crontab:
- Λεπτό:
0-59. - Ώρα:
0-23, μορφή 24 ωρών. - Ημέρα του μήνα:
1-31. - Μήνας:
1-12ή τις συντομογραφίεςΙΑΝΟΥΑ,ΦΕΒ,MAR,ΑΠΡ,ΜΑΪΟΣ,ΙΟΥΝ,ΙΟΥΛ,AUG,SEP,OCT,ΝΟΕ,ΔΕΚ. - Ημέρα της εβδομάδας:
0-7όπου0και7και τα δύο αντιπροσωπεύουν την Κυριακή ή τις συντομογραφίεςSUN,MON,TUE,WED,THU,ΠΑΡ,ΣΑΒ.
Ειδικοί χαρακτήρες κοινόχρηστοι από τα πέντε πεδία:
*: οποιαδήποτε τιμή, αντιστοιχεί σε όλες τις επιτρεπόμενες τιμές στο πεδίο.,: διακριτή λίστα, για παράδειγμα1,15,30στο πεδίο λεπτών.-: περιλαμβάνει εύρος, για παράδειγμα9-17για ώρες γραφείου./: βήμα, για παράδειγμα*/15= κάθε 15 μονάδες, ή0-30/5= κάθε 5 λεπτά μεταξύ 0 και 30.
Επεκτάσεις Quartz (Java, AWS EventBridge, Spring): η γραμματική αυξάνεται σε 6 ή 7
πεδία με στήλη seconds στην κορυφή (0-59) και μερικές φορές στήλη
Επόμενο έτος (1970-2099). Ο Quartz εισάγει επίσης το ? (χωρίς συγκεκριμένο
τιμή, για αποσύνδεση της ημέρας του μήνα και της ημέρας της εβδομάδας), L (τελευταία: τελευταία ημέρα του μήνα,
ή την περασμένη Παρασκευή με 5L), W (πλησιέστερη εργάσιμη ημέρα) και #
(Νη ημέρα της εβδομάδας του μήνα, για παράδειγμα 2#3 για την 3η Δευτέρα). Μια έκφραση
Ο χαλαζίας γενικά δεν είναι συμβατός με ένα κρόντο UNIX και αντίστροφα: αυτό είναι το κύριο
πηγή σφάλματος κατά την αντιγραφή μιας έκφρασης cron από μια πλατφόρμα σε άλλη.
# UNIX / Vixie cron (5 πεδία)
0 9 * * 1-5
# Χαλαζίας (6 πεδία με δευτερόλεπτα)
0 0 9 ? * ΔΕΥ-ΠΑΡ
# Χαλαζίας (7 πεδία με έτος)
0 0 9 ? * ΔΕΥ-ΠΑΡ 2026
Γιατί να αποκωδικοποιήσετε μια έκφραση cron;
Η ανάγνωση του 0 0 * * * είναι γρήγορη. Η ανάγνωση του */7 2-5 1.15 * 1-5 είναι πολύ λιγότερο. Πότε
μια έκφραση είναι πέρα από το ασήμαντο, ο κίνδυνος λάθους ερμηνείας αυξάνεται και η αποκωδικοποίηση cron
μετατρέπεται σε στάδιο αναθεώρησης από μόνο του.
- Παραγωγή εντοπισμού σφαλμάτων: κατανοήστε γιατί μια εργασία ενεργοποιήθηκε στις 03:17 και όχι στις 03:00 ή εντοπίστε μια επικάλυψη μεταξύ δύο εργασιών.
- Έλεγχος κώδικα: επικυρώστε ότι ένας προγραμματιστής που προωθείται ως αίτημα έλξης κάνει αυτό που κάνει ισχυρίζεται ο συγγραφέας, χωρίς να χρειάζεται να απομνημονεύει τη σημασιολογία κάθε συμβόλου.
- Έλεγχος χρονοδιαγράμματος: Ελέγξτε τις εργασίες cron Linux στο
/etc/crontabκαι/etc/cron.d/, ενεργοποιήσεις Jenkins,spec.scheduleτου Kubernetes CronJob, οι κανόνες Θέσεις εργασίας AWS EventBridge και GCP Cloud Scheduler. - Μετεγκατάσταση παλαιού τύπου: συνεχίστε ένα ιστορικό
/etc/crontabχωρίς τεκμηρίωση και δημιουργήστε ξανά τον χάρτη εργασιών πριν από μια αλλαγή υποδομής. - Ενσωμάτωση: επιτρέψτε σε έναν νέο προγραμματιστή να ξαναδιαβάσει μια crontab χωρίς να χρειάζεται να μάθετε όλους τους ειδικούς χαρακτήρες από τη μια μέρα στην άλλη.
Πώς να χρησιμοποιήσετε τον αποκωδικοποιητή cron
Η διαδικασία που πρέπει να ακολουθήσετε για την αποκωδικοποίηση μιας έκφρασης crontab με το εργαλείο:
- Επικολλήστε την έκφραση cron σας στο πεδίο εισαγωγής (5 πεδία χωρίζονται με κενά).
- Δηλώστε τον αριθμό των επόμενων εκτελέσεων προς υπολογισμό.
- Κάντε κλικ στο μετατροπή για να εκκινήσετε την αποκωδικοποίηση cron: το εργαλείο επιστρέφει ανθρώπινη πρόταση που εξηγεί το έναυσμα, συν την ημερομηνία λίστας των επόμενων εκτελέσεων.
- Ελέγξτε οπτικά ότι οι ημερομηνίες αντιστοιχούν στην πρόθεσή σας (ώρα, ημέρα, συχνότητα).
- Αντιγράψτε το αποτέλεσμα μέσω του κουμπιού αντιγραφής για να το επικολλήσετε σε ένα εισιτήριο, PR ή τεκμηρίωση τεχνικό.
Το εργαλείο δεν παρέχει απλώς συντακτική ανάλυση: παρέχει μια εξήγηση cron στη φυσική γλώσσα, καθιστώντας το ταυτόχρονα αποκωδικοποιητή cron και α πρόγραμμα επικύρωσης.
Κλασικά παραδείγματα έκφρασης cron
Τα παρακάτω μοτίβα καλύπτουν τα περισσότερα από τα προγράμματα cron που συναντώνται στην παραγωγή. Αυτοί είναι όλα έγκυρα σε Linux crontab, Kubernetes CronJob, GitHub Actions και στην πλειοψηφία των σχεδιαστές εφαρμογών.
| Έκφραση | Ανθρώπινη ανάγνωση |
|---|---|
* * * * * |
Κάθε λεπτό |
0 * * * * |
Κάθε ώρα απότομη |
0 0 * * * |
Κάθε μέρα τα μεσάνυχτα |
0 0 * * 0 |
Κάθε Κυριακή τα μεσάνυχτα |
*/15 * * * * |
Κάθε 15 λεπτά |
0 9 * * 1-5 |
9:00 π.μ. Δευτέρα έως Παρασκευή |
0 0 1 * * |
Την 1η κάθε μήνα τα μεσάνυχτα |
0 0,12 * * * |
Τα μεσάνυχτα και το μεσημέρι κάθε μέρα |
*/5 9-17 * * 1-5 |
Κάθε 5 λεπτά κατά τις εργάσιμες ώρες |
30 2 1,15 * * |
1 και 15 του μήνα στις 2:30 π.μ. |
Για να εκτελέσετε μια εργασία cron σε διακομιστή Linux, επεξεργαστείτε το crontab χρήστη από το κέλυφος:
# επεξεργαστείτε την καρτέλα του τρέχοντος χρήστη
$ crontab -e
# λίστα υπαρχουσών εργασιών
$ crontab -l
# παράδειγμα γραμμής που προστέθηκε: καθημερινή δημιουργία αντιγράφων ασφαλείας στις 3 π.μ
0 3 * * * /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1
Παράδειγμα εξόδου μετατροπέα cron για */5 * * * *:
2026-05-05 00:00:00
2026-05-05 00:05:00
2026-05-05 00:10:00
2026-05-05 00:15:00
2026-05-05 00:20:00
...
Συχνές ερωτήσεις σχετικά με τον αποκωδικοποιητή cron
Ποια είναι η διαφορά μεταξύ του UNIX cron και του Quartz;
Το UNIX/Vixie cron χρησιμοποιεί 5 πεδία (από λεπτό σε ημέρα της εβδομάδας), χωρίς ακρίβεια στο δεύτερο και δεν έχει
εγγενής έννοια της «τελευταίας ημέρας του μήνα». Το Quartz (Java, Spring, AWS EventBridge) προσθέτει μια στήλη
δευτερόλεπτα στο επάνω μέρος, μερικές φορές μια στήλη έτος στο κάτω μέρος και πολλά σύμβολα
(?, L, W, #) λείπει από την καρτέλα του Linux. Α
Επομένως, η έκφραση cron Quartz 6 πεδίων δεν είναι απευθείας φορητή
/etc/crontab και το αντίστροφο. Ο αποκωδικοποιητής cron μας στοχεύει στη μορφή 5
πεδία, που καλύπτει την πλειοψηφία των σχεδιαστών.
Πώς να εκτελείτε μια εργασία cron κάθε 5 λεπτά;
Με το βήμα / στο πεδίο λεπτών:
*/5 * * * * /usr/local/bin/check-health.sh
Αυτή η έκφραση crontab ενεργοποιεί το σενάριο στα λεπτά 0, 5, 10, 15... από κάθε
ώρα, κάθε μέρα. Για περιορισμό στις ώρες εργασίας από Δευτέρα έως Παρασκευή, προσθέστε τους περιορισμούς
στα πεδία ώρας και ημέρας της εβδομάδας: */5 9-17 * * 1-5.
Τι σημαίνει ο αστερίσκος (*) σε μια έκφραση cron;
Ο αστερίσκος σημαίνει οποιαδήποτε τιμή: ταιριάζει με όλες τις εξουσιοδοτημένες τιμές του πεδίου. Σε
0 0 * * *, τα τρία αστέρια σημαίνουν "οποιαδήποτε ημέρα του μήνα, οποιαδήποτε
μήνα, οποιαδήποτε ημέρα της εβδομάδας. Σε συνδυασμό με τα δύο πρώτα πεδία που έχουν οριστεί σε 0, εμείς
παίρνει "κάθε μέρα τα μεσάνυχτα". Το αστέρι μπορεί επίσης να συνδυαστεί με ένα βήμα: */15 in
λεπτό = κάθε 15 λεπτά.
Έχει το Crontab ζώνη ώρας;
Προεπιλογές στη ζώνη ώρας του διακομιστή. Σε μια crontab Linux, είναι το σύστημα TZ (συχνά UTC σε VPS και
δοχεία). Το GitHub Actions αναγκάζει το UTC. Το Kubernetes CronJob χρησιμοποιεί ζώνη ώρας ελεγκτή,
με δυνατότητα διαμόρφωσης μέσω spec.timeZone από την 1.27. Το AWS EventBridge αξιολογεί τις εκφράσεις κατά
UTC. Οι προγραμματιστές εφαρμογών (Symfony Scheduler, Quartz, Airflow) σας επιτρέπουν συχνά να ορίσετε
ζώνη ώρας αφιερωμένη σε κάθε εργασία. Εάν έχετε αμφιβολίες, ελέγξτε την date στον διακομιστή προορισμού και
συγκρίνετε με την έξοδο του μετατροπέα cron.
Cron job vs at command: ποια να επιλέξω;
Το cron χρησιμοποιείται για την εκτέλεση μιας επαναλαμβανόμενης εργασίας σύμφωνα με ένα χρονοδιάγραμμα. Χρησιμοποιείται το at
για να εκτελέσετε μια εντολή μόνο μία φορά σε μια δεδομένη στιγμή. Για καθημερινή δημιουργία αντιγράφων ασφαλείας,
περιστροφή καταγραφής ή κανονική κλήση API, χρησιμοποιήστε το cron. Για αναβολή μιας μεμονωμένης λειτουργίας
("Επανεκκίνηση αυτής της ανάπτυξης στις 10 μ.μ. απόψε"), χρησιμοποιήστε το στη διεύθυνση:
$ echo "/usr/local/bin/deploy.sh" | στις 22:00
Πώς να δοκιμάσετε μια έκφραση cron χωρίς να την ενεργοποιήσετε;
Αυτός είναι ακριβώς ο ρόλος αυτού του μετατροπέα cron: υπολογίζει το επόμενο N
εκτελέσεις από την τρέχουσα ώρα, χωρίς να ξεκινήσει καμία εργασία. Βλέπεις αμέσως αν σου
Η έκφραση crontab ενεργοποιείται στις 03:00 όπως αναμενόταν ή στις 03:17 κατά λάθος. Για να πάω παραπέρα
πολύ πριν εγκαταστήσετε την εργασία, μπορείτε επίσης να δοκιμάσετε μόνο το σενάριο (bash -x script.sh)
και ελέγξτε τη σύνταξη ενός αρχείου crontab με crontab -T αρχείο στις διανομές
που το υποστηρίζουν.
Τι θα συμβεί αν οριστούν και οι δύο η ημέρα του μήνα και η ημέρα της εβδομάδας;
Στο Vixie cron (Linux), ο κανόνας είναι ένα λογικό Ή: η εργασία ενεργοποιείται εάν ένα ή
το άλλοαπό τα δύο γήπεδα ταιριάζει. Αυτό είναι αντίθετο και αποτελεί πηγή σφαλμάτων. Ο χαλαζίας χρησιμοποιεί α
ΚΑΙ, εξ ου και η εισαγωγή του συμβόλου ? για να υποδηλώνει ρητά "όχι"
Κατά γενικό κανόνα, διορθώστε μόνο ένα από τα δύο πεδία.
Παράδειγμα αιτήματος
curl -X POST https://cdrn.fr/api/v1/tools/cron-converter/execute \
-H "Content-Type: application/json" \
-d '{"cron":"...","number_next_date":1}'
Σχήμα εισόδου
| Πεδίο | Τύπος | Απαιτείται | Προεπιλογή |
|---|---|---|---|
cron |
string | ✓ | – |
number_next_date |
integer | ✓ | – |
Σημεία πρόσβασης
GET https://cdrn.fr/api/v1/tools- εμφανίζει όλα τα διαθέσιμα εργαλείαGET https://cdrn.fr/api/v1/tools/cron-converter- ανακτά το σχήμα αυτού του εργαλείουPOST https://cdrn.fr/api/v1/tools/cron-converter/execute- εκτελεί αυτό το εργαλείο με payload JSON