Κατασκευή έκφρασης cron

κατασκευάζει μια έκφραση cron από οπτικά πεδία ή προεπιλεγμένη ρύθμιση (κάθε λεπτό, ωριαία, ημερήσια, εβδομαδιαία...)

Γιατί ένα visual cron builder;

Μια έκφραση cron περιέχει πέντε πεδία και ωστόσο παραμένει ένα από τα πιο γεννητικά σφάλματα στην παραγωγή. Πόσες φορές ένας προγραμματιστής έγραψε 0 0 * * 1 σκεπτόμενος "κάθε Δευτέρες", χωρίς να θυμόμαστε ότι το 1 μπορεί να σημαίνει Κυριακή ανάλογα με τις υλοποιήσεις; Πόσοι καιρό έχουμε μπερδέψει */15 και 15; Το cron builder απαντά σε αυτό ανάγκη: να συνθέσετε οπτικά μια έκφραση crontab, από τις τρέχουσες προεπιλογές ή μεμονωμένων πεδίων, και ετοιμάστε την τελική έκφραση για επικόλληση σε ένα κρόντο Linux, ένα Kubernetes CronJob ή ένα πρόγραμμα GitHub Actions.

Το εργαλείο είναι το αντίθετο από τον αποκωδικοποιητή cron μας: όπου βρίσκεται ο μετατροπέας μια έκφραση και πραγματοποιεί τις επόμενες εκτελέσεις, ο οικοδόμος παίρνει ανθρώπινες επιλογές και παράγει την αντίστοιχη έκφραση cron.

Πώς λειτουργεί

Η γραφική διεπαφή προσφέρει δύο συμπληρωματικές λειτουργίες σύνθεσης:

  • Προκαθορισμένη λειτουργία: ένας επιλογέας συχνότητας (κάθε λεπτό, κάθε ώρα, κάθε μέρα, κάθε εβδομάδα, κάθε μήνα, κάθε χρόνο, προσαρμοσμένο) το οποίο δημιουργεί αμέσως μια έκφραση cron ισχύει.
  • Λειτουργία πεδίου: πέντε επεξεργάσιμα πεδία (λεπτό, ώρα, ημέρα του μήνα, μήνας, ημέρα εβδομάδα) όπου εισάγετε ελεύθερα *, έναν ακέραιο αριθμό, ένα εύρος 1-5, μια λίστα 1,15,30 ή ένα βήμα */15.

Ο οικοδόμος ενημερώνει την έκφραση σε πραγματικό χρόνο και εμφανίζει μια συνοπτική ανθρώπινη ανάγνωση («κάθε μέρα στις 3 π.μ., "κάθε 15 λεπτά") που χρησιμεύει ως προστασία: εάν η πρόταση δεν ταιριάζει με την πρόθεσή σας, η έκφραση μάλλον είναι λάθος.

Τα πέντε cron πεδία, σε απλή γλώσσα

Μια τυπική έκφραση cron περιέχει πέντε πεδία που χωρίζονται με κενά:

λεπτά ώρα ημέρα-μήνα μήνα ημέρα-εβδομάδα
* * * * *
  • λεπτό (0 έως 59);
  • ώρα (0 έως 23);
  • ημέρα του μήνα (1 έως 31);
  • μήνα (1 έως 12 ή συντομογραφίες Ιαν, Φεβ, κ.λπ.);
  • ημέρα της εβδομάδας (0 έως 7, 0 και 7 και οι δύο είναι Κυριακή στις περισσότερες υλοποιήσεις).

Κάθε πεδίο δέχεται διάφορες μορφές: * (όλες οι τιμές), έναν συγκεκριμένο ακέραιο (5), λίστα (1,3,5), εύρος (9-17), βήμα (*/15 κάθε 15 τιμές), ή έναν συνδυασμό (0-30/5).

Τυπικές περιπτώσεις χρήσης

  • Προγραμματιστής που μαθαίνει cron: οπτικοποιήστε πώς αλληλεπιδρά κάθε πεδίο, χωρίς να διακινδυνεύσετε μια ψευδής έκφραση στην παραγωγή.
  • Το Sysadmin βιάζεται: δημιουργήστε σε λίγα δευτερόλεπτα ένα πρόγραμμα για ένα Linux cron, ένα Kubernetes CronJob ή μια εργασία Ansible χωρίς να ξαναδιαβάσετε τη σελίδα ανθρώπου.
  • Προγραμματιστής χωρίς εμπειρία POSIX: δημιουργήστε μια έκφραση crontab ισχύει για Symfony Scheduler, Laravel Scheduler ή node-cron χωρίς να γνωρίζετε την ιστορική σύνταξη.
  • DevOps υπό εξέταση: δημιουργήστε γρήγορα πρωτότυπο μια έκφραση για να την προτείνετε σε ένα τράβηγμα ζητήστε και, στη συνέχεια, επικυρώστε το με τον αποκωδικοποιητή cron.
  • Μετεγκατάσταση παλαιού τύπου: επαναδιατυπώστε μια ιστορική έκφραση cron χρησιμοποιώντας το εργαλείο δημιουργίας για να διασφαλίσετε τη σημασιολογία πριν την ωθήσετε αλλού.

Κοινές προεπιλογές

Η επιλογή μιας προεπιλογής αντικαθιστά τα μεμονωμένα πεδία και παράγει την αντίστοιχη έκφραση:

  • Κάθε λεπτό: * * * * *. Αποφύγετε στην παραγωγή εκτός εάν είναι απαραίτητο συγκεκριμένα.
  • Κάθε ώρα: 0 * * * *. Στην αρχή κάθε ώρας.
  • Κάθε μέρα: 0 0 * * *. Τα μεσάνυχτα.
  • Κάθε εβδομάδα: 0 0 * * 0. Κάθε Κυριακή τα μεσάνυχτα.
  • Κάθε μήνα: 0 0 1 * *. Την 1η του μήνα τα μεσάνυχτα.
  • Κάθε χρόνο: 0 0 1 1 *. 1η Ιανουαρίου τα μεσάνυχτα.

Κοινά μοτίβα που πρέπει να γνωρίζετε

<κεφάλι>
Έκφραση Ανθρώπινη ανάγνωση
0 0 * * * Κάθε μέρα τα μεσάνυχτα
*/15 * * * * Κάθε 15 λεπτά
0 9 * * 1-5 Κάθε εργάσιμη ημέρα στις 9 π.μ.
0 0 1 * * 1η του μήνα τα μεσάνυχτα
0 0 * * 0 Κάθε Κυριακή τα μεσάνυχτα
*/5 9-17 * * 1-5 Κάθε 5 λεπτά κατά τις εργάσιμες ώρες
0 3 * * * Κάθε μέρα στις 3 π.μ.
30 2 1,15 * * 1 και 15 του μήνα στις 2:30 π.μ.

Συνθέστε μια προσαρμοσμένη έκφραση

Για πιο συγκεκριμένες περιπτώσεις, ο οδηγός εκθέτει τα πέντε πεδία για ελεύθερη είσοδο. Μερικά παραδείγματα χρήσιμο:

  • Κάθε μέρα στις 3 π.μ.: minute=0, hour=3, άλλα πεδία *.
  • Κάθε 15 λεπτά: minute=*/15, άλλα πεδία *.
  • Δευτέρα έως Παρασκευή στις 9 π.μ.: minute=0, hour=9, day-of-the-week=1-5.
  • Κάθε 1 και 15 του μήνα το μεσημέρι: minute=0, hour=12, day-of-month=1.15.
  • Κάθε 5 λεπτά μεταξύ 9 π.μ. και 5 μ.μ.: minute=*/5, time=9-17.

Πώς να χρησιμοποιήσετε το cron builder

  1. Επιλέξτε μια προεπιλογή (κάθε λεπτό, κάθε ώρα, κάθε μέρα, κάθε εβδομάδα, κάθε μήνα, κάθε χρόνο) που αντιστοιχεί στη βάση της ανάγκης σας.
  2. Περιορίστε εάν είναι απαραίτητο τροποποιώντας απευθείας τα πέντε πεδία (λεπτό, ώρα, ημέρα του μήνα, μήνας, ημέρα της εβδομάδας).
  3. Διαβάστε την ανθρώπινη πρόταση που δημιουργήθηκε από το εργαλείο για να επιβεβαιώσετε την πρόθεση.
  4. Αντιγράψτε την έκφραση cron που παράγεται μέσω του κουμπιού αντιγραφής.
  5. Επικυρώστε το χρονοδιάγραμμα με τον αποκωδικοποιητή cron που υπολογίζει επόμενες πραγματικές ημερομηνίες εκτέλεσης.
  6. Επικολλήστε την έκφραση στο Linux crontab, στο Kubernetes CronJob, στο Symfony Scheduler ή τη ροή εργασίας σας στο GitHub Actions.

Κλασικές παγίδες

  • Ημέρα του μήνα και η ημέρα της εβδομάδας μαζί: εάν και τα δύο δεν είναι *, η συμπεριφορά διαφέρει μεταξύ των υλοποιήσεων. Το Linux/Vixie cron εφαρμόζει ένα OR. το Οι σύγχρονες βιβλιοθήκες μερικές φορές συμπεριφέρονται διαφορετικά. Για αποφυγή.
  • Ημέρα 1 = Δευτέρα ή Κυριακή;: ανάλογα με τη χώρα και τη σύμβαση. Οι περισσότεροι κρον Το Unix θεωρεί την Κυριακή=0 και το Σάββατο=6. Ελέγξτε τον προγραμματιστή σας.
  • Ζώνη ώρας: ένα cron Unix χρησιμοποιεί τη ζώνη ώρας του διακομιστή από προεπιλογή. Το Οι προγραμματιστές εφαρμογών (Symfony Scheduler, Quartz) σας επιτρέπουν συχνά να ορίσετε μια αποκλειστική ζώνη ώρας.
  • Λείπει λεπτό: * * * * * εκτελεί την εργασία κάθε λεπτό, η οποία σπάνια είναι αυτό που θέλουμε. Εξετάστε το ενδεχόμενο να ορίσετε έναν συγκεκριμένο κανόνα ετικέτας (0). ωριαίες εργασίες.

Ανθρώπινη ανάγνωση και παραγωγή

Εκτός από την έκφραση cron, το εργαλείο προσφέρει συνοπτική ανθρώπινη ανάγνωση («όλα ημέρες τα μεσάνυχτα», «κάθε 5 λεπτά»). Αυτή είναι μια διασφάλιση: εάν η πρόταση δεν ανταποκρίνεται στη δική σας πρόθεση, μάλλον είναι λάθος η έκφραση. Για μια περίπλοκη υπόθεση, χρησιμοποιήστε τη δική μας αποκωδικοποιητής cron για τον υπολογισμό των επόμενων πραγματικών ημερομηνιών εκτέλεσης.

Συχνές ερωτήσεις

Μπορώ να επεξεργαστώ χειροκίνητα την έκφραση μετά τη χρήση της διεπαφής;

Ναι. Το πρόγραμμα δημιουργίας δεν είναι αποκλειστική λειτουργία: τα πέντε πεδία παραμένουν επεξεργάσιμα ανά πάσα στιγμή. Εσύ μπορεί να ξεκινήσει από μια προεπιλογή και, στη συνέχεια, να προσαρμόσει ένα πεδίο με το χέρι για να λάβετε μιαcrontab εξατομικευμένη έκφραση. Η ανθρώπινη ανάγνωση επανυπολογίζεται αμέσως.

Υποστηρίζει το εργαλείο τη μορφή Quartz 6 πεδίων (με δευτερόλεπτα);

Όχι: η μορφή 5 πεδίων είναι το πρότυπο Unix και η βάση κοινή για τους περισσότερους σχεδιαστές (Linux crontab, Kubernetes CronJob, GitHub Actions, GitLab CI, Symfony Scheduler, Laravel Scheduler). Ο Quartz (Java) δέχεται ένα επιπλέον πεδίο για δευτερόλεπτα και συγκεκριμένα σύμβολα (?, L, W, #), αλλά αυτή η ανάγκη παραμένει σπάνια.

Πώς γίνεται η διαχείριση της ζώνης ώρας;

Ο κατασκευαστής παράγει μια ουδέτερη έκφραση cron: είναι ο κινητήρας που εκτελεί την εργασία που την εφαρμόζει ζώνη ώρας. Σε ένα crontab Linux, αυτό είναι το TZ του διακομιστή. Στο GitHub Actions, είναι UTC. Ενεργό Kubernetes 1.27+, μπορείτε να ορίσετε το spec.timeZone στο μανιφέστο. Symfony Scheduler και Το Quartz εκθέτει μια ειδική ζώνη ώρας ανά εργασία.

Πώς μπορώ να επικυρώσω την έκφρασή μου χωρίς να την εκτελώ στην παραγωγή;

Χρησιμοποιήστε τον αποκωδικοποιητή cron. Υπολογίζει τις επόμενες N εκτελέσεις από την τρέχουσα στιγμή, χωρίς να ξεκινήσει καμία εργασία. Αυτός είναι ο καλύτερος τρόπος για να επιβεβαιώσετε ότι α Η cron έκφραση ενεργοποιείται την προγραμματισμένη ώρα πριν την ανάπτυξή της.

Τι σχέση έχει αυτό με το Symfony Scheduler;

Το Symfony Scheduler δέχεται εκφράσεις cron 5 πεδίων μέσω Schedule::cron('0 3 * * *', ...) . Η έκφραση που παράγεται από το builder μπορεί επομένως να επικολληθεί ως έχει. Το ίδιο και η Laravel Scheduler (->cron('...')), node-cron, Hangfire και Airflow.

Θα πρέπει η εντολή να έχει πρόθεμα στην καρτέλα του συστήματος;

Ναι, στο /etc/crontab χρειάζεστε έναν χρήστη (0 3 * * * www-data /usr/bin/php ...), ενώ το crontab -e ανά χρήστη το παραλείπει. Η ίδια η έκφραση παραμένει πανομοιότυπη.

Παράδειγμα αιτήματος

curl -X POST https://cdrn.fr/api/v1/tools/cron-builder/execute \
  -H "Content-Type: application/json" \
  -d '{"preset":"none","minute":"*","hour":"*","day_of_month":"*","month":"*","day_of_week":"*"}'

Σχήμα εισόδου

Πεδίο Τύπος Απαιτείται Προεπιλογή
preset choice (none, every_minute, hourly, daily, weekly, monthly, yearly) none
minute string *
hour string *
day_of_month string *
month string *
day_of_week string *

Σημεία πρόσβασης

  • GET https://cdrn.fr/api/v1/tools - εμφανίζει όλα τα διαθέσιμα εργαλεία
  • GET https://cdrn.fr/api/v1/tools/cron-builder - ανακτά το σχήμα αυτού του εργαλείου
  • POST https://cdrn.fr/api/v1/tools/cron-builder/execute - εκτελεί αυτό το εργαλείο με payload JSON

CDRN - δημιουργήθηκε από ARDNTECH