fixmint
EL

Πώς διαβάζετε μια έκφραση cron, πεδίο προς πεδίο

Από · · 5 λεπτά ανάγνωση

Μια έκφραση cron είναι μια σύντομη γραμμή κειμένου που λέει σε έναν χρονοπρογραμματιστή πότε να εκτελέσει μια εργασία. Η συνήθης μορφή έχει πέντε πεδία χωρισμένα με κενά: λεπτό, ώρα, ημέρα του μήνα, μήνα και ημέρα της εβδομάδας. Η γραμμή 0 9 * * 1-5 σημαίνει 09:00 από Δευτέρα έως Παρασκευή. Κάθε πεδίο είναι ένας αριθμός, ένα όνομα, μια λίστα, ένα εύρος ή ένα βήμα, ή * για κάθε τιμή, και μια εργασία εκτελείται σε κάθε χρονική στιγμή όπου ταιριάζουν όλα τα πεδία.

Επεξήγηση cronΤο cron τρέχει τη λάθος ώραΚάντε το δωρεάν

Τα πέντε πεδία

ΠεδίοΕπιτρεπόμενες τιμέςΠαράδειγμα
Λεπτό0 έως 5930 είναι το λεπτό 30 της ώρας
Ώρα0 έως 239 είναι 09:00, σε ρολόι 24 ωρών
Ημέρα του μήνα1 έως 3115 είναι η 15η
Μήνας1 έως 12, ή JAN έως DEC3 ή MAR είναι Μάρτιος
Ημέρα της εβδομάδας0 έως 6, ή SUN έως SAT0 ή SUN είναι Κυριακή, 1 είναι Δευτέρα

Ορισμένα συστήματα δέχονται και το 7 για την Κυριακή, αλλά όχι όλα, γι' αυτό χρησιμοποιήστε 0 ή SUN. Το cron δεν έχει πεδίο δευτερολέπτων σε αυτή τη μορφή, οπότε το μικρότερο βήμα είναι ένα λεπτό.

Λίστες, εύρη, βήματα και ονόματα

  • σημαίνει κάθε τιμή του πεδίου. Το * * * * εκτελείται κάθε λεπτό.
  • Μια λίστα χρησιμοποιεί κόμματα. Το 0 9,17 * * * εκτελείται στις 09:00 και στις 17:00 κάθε μέρα.
  • Ένα εύρος χρησιμοποιεί παύλα. Το 1-5 στο πεδίο ημέρας της εβδομάδας σημαίνει Δευτέρα έως Παρασκευή.
  • Ένα βήμα χρησιμοποιεί κάθετο. Το */15 στο πεδίο λεπτού σημαίνει 0, 15, 30 και 45. Το 10-30/5 σημαίνει 10, 15, 20, 25 και 30.
  • Τα ονόματα όπως MON-FRI μπορούν να αντικαταστήσουν τους αριθμούς. Είναι πιο εύκολα στην ανάγνωση, αν τα δέχεται ο χρονοπρογραμματιστής σας.

Αυτά τα μέρη συνδυάζονται. Το 0 8-18/2 * * * εκτελείται στο λεπτό 0 κάθε δεύτερης ώρας από τις 08:00 έως τις 18:00.

Συνηθισμένα προγράμματα

ΈκφρασηΣημασία
* * * * *Κάθε λεπτό
/15 * * *Κάθε 15 λεπτά
0 * * * *Στο λεπτό 0 κάθε ώρας
0 2 * * *Κάθε μέρα στις 02:00
0 9 * * 1-509:00, Δευτέρα έως Παρασκευή
0 9,17 * * *09:00 και 17:00 κάθε μέρα
30 6 1 * *06:30 την 1η κάθε μήνα
0 0 * * 0Μεσάνυχτα κάθε Κυριακή
0 0 1 1 *Μεσάνυχτα της 1ης Ιανουαρίου
/5 9-17 * 1-5Κάθε 5 λεπτά από 09:00 έως 17:55, Δευτέρα έως Παρασκευή

Προσέξτε ότι το 0 0 * * είναι μεσάνυχτα και το 0 12 * * είναι μεσημέρι. Η λάθος ώρα είναι ένα από τα πιο συνηθισμένα σφάλματα.

Ημέρα του μήνα και ημέρα της εβδομάδας

Όταν τα πεδία ημέρας του μήνα και ημέρας της εβδομάδας έχουν και τα δύο περιορισμό, η εργασία εκτελείται όταν ταιριάζει είτε το ένα είτε το άλλο. Αυτός είναι ο κλασικός κανόνας στο Vixie cron και σε πολλά συστήματα που προέρχονται από αυτό. Έτσι, το 0 0 13 * 5 εκτελείται τα μεσάνυχτα της 13ης κάθε μήνα και επίσης κάθε Παρασκευή. Οι άνθρωποι συχνά περιμένουν μόνο την Παρασκευή 13, και καταλήγουν με περισσότερες εκτελέσεις από όσες σχεδίασαν.

Αν ένα από τα δύο πεδία είναι *, μετράει μόνο το άλλο. Για να εκτελεστεί την Παρασκευή 13, προγραμματίστε μια εργασία για κάθε Παρασκευή και ελέγξτε την ημερομηνία μέσα στο σενάριο. Άλλοι χρονοπρογραμματιστές, συμπεριλαμβανομένων ορισμένων υπηρεσιών cloud, μπορεί να χρησιμοποιούν διαφορετικούς κανόνες, γι' αυτό διαβάστε την τεκμηρίωσή τους.

Ζώνες ώρας και θερινή ώρα

Το cron τρέχει με την ώρα του μηχανήματος ή της υπηρεσίας στην οποία εκτελείται, που συνήθως είναι η τοπική ζώνη ώρας του μηχανήματος. Μια εργασία που έχει οριστεί για 02:30 εκτελείται στις 02:30 αυτού του ρολογιού. Ελέγξτε πρώτα τη ζώνη (σε Linux, το date την εμφανίζει). Αν θέλετε οι εργασίες να ακολουθούν ένα ρολόι παντού, πολλές ομάδες βάζουν τους διακομιστές σε UTC, και ορισμένοι χρονοπρογραμματιστές σας επιτρέπουν να ορίσετε ζώνη ώρας για κάθε εργασία.

Η θερινή ώρα αλλάζει το ρολόι δύο φορές το χρόνο. Την άνοιξη, πολλά μέρη πηδούν από τις 02:00 κατευθείαν στις 03:00, οπότε μια εργασία στις 02:30 δεν έχει χρόνο να εκτελεστεί. Το φθινόπωρο, η ώρα από 01:00 έως 01:59 εμφανίζεται δύο φορές. Οι χρονοπρογραμματιστές χειρίζονται αυτές τις περιπτώσεις διαφορετικά. Κάποιοι παραλείπουν την εργασία, κάποιοι την εκτελούν μία φορά και κάποιοι δύο φορές. Κρατήστε τις εργασίες έξω από το παράθυρο αλλαγής των ξημερωμάτων, ή χρησιμοποιήστε UTC, αν σας ενδιαφέρει η διαφορά.

Έξι πεδία και Quartz

Ορισμένοι χρονοπρογραμματιστές προσθέτουν στην αρχή ένα πεδίο δευτερολέπτων, οπότε το /10 * * * * εκτελείται κάθε 10 δευτερόλεπτα. Ο χρονοπρογραμματιστής Quartz για Java χρησιμοποιεί δευτερόλεπτα, λεπτά, ώρα, ημέρα του μήνα, μήνα, ημέρα της εβδομάδας και ένα προαιρετικό έτος, και προσθέτει τέσσερις ειδικούς χαρακτήρες:

  • ? σημαίνει «καμία συγκεκριμένη τιμή». Το Quartz το απαιτεί στο πεδίο ημέρας του μήνα ή ημέρας της εβδομάδας, όποιο από τα δύο δεν ορίζετε.
  • L σημαίνει τελευταία. Το L στο πεδίο ημέρας του μήνα είναι η τελευταία μέρα του μήνα, και το 6L στο πεδίο ημέρας της εβδομάδας είναι η τελευταία Παρασκευή.
  • W σημαίνει την πλησιέστερη εργάσιμη ημέρα. Το 15W είναι η εργάσιμη ημέρα πιο κοντά στην 15η, και δεν πηδά σε άλλον μήνα.
  • # σημαίνει τη n-οστή ημέρα της εβδομάδας. Το 6#3 είναι η τρίτη Παρασκευή.

Το Quartz αριθμεί τις ημέρες διαφορετικά από τη μορφή των πέντε πεδίων. Το δικό του 1 είναι Κυριακή και το 7 είναι Σάββατο, οπότε Δευτέρα έως Παρασκευή είναι 2-6, όχι 1-5. Ελέγχετε πάντα ποια μορφή χρησιμοποιεί ο χρονοπρογραμματιστής σας πριν αντιγράψετε μια γραμμή.

Συνηθισμένα λάθη

  • */7 στο πεδίο λεπτού. Οι τιμές είναι 0, 7, 14 και ούτω καθεξής μέχρι το 56. Η επόμενη θα ήταν η 63, που δεν υπάρχει, οπότε η εκτέλεση μετά το 56 γίνεται στο λεπτό 0 της επόμενης ώρας. Το κενό είναι μόνο τέσσερα λεπτά και τα διαστήματα είναι άνισα. Χρησιμοποιήστε ένα βήμα που διαιρεί το 60 ακριβώς, όπως 5, 10, 15 ή 30.
  • Το 30 Φεβρουαρίου. Δεν υπάρχει τέτοια ημερομηνία, οπότε το 0 0 30 2 * δεν εκτελείται ποτέ. Το ίδιο ισχύει για την 31η σε μήνα με 30 ημέρες. Με τον κανόνα του «είτε-είτε», ένας περιορισμός ημέρας της εβδομάδας μπορεί ακόμα να προκαλέσει εκτελέσεις σε άλλες ημέρες, οπότε ελέγξτε το αποτέλεσμα.
  • Ώρα 24 ή λεπτό 60. Είναι εκτός εύρους. Οι περισσότεροι χρονοπρογραμματιστές τα απορρίπτουν όταν τα αποθηκεύετε, αλλά όχι όλοι.
  • Προσδοκία για δευτερόλεπτα. Μια γραμμή πέντε πεδίων εκτελείται μόνο σε ακέραια λεπτά.
  • Σύγχυση του cron με τις κανονικές εκφράσεις. Στο cron, το σημαίνει κάθε τιμή. Σε κανονική έκφραση, το σημαίνει επανάληψη του στοιχείου πριν από αυτό. Χρησιμοποιήστε τον δοκιμαστή regex για μοτίβα και κρατήστε χωριστά τις γραμμές cron.

Ελέγξτε τις επόμενες εκτελέσεις

Πριν βασιστείτε σε ένα πρόγραμμα, διαβάστε τη γραμμή με απλά λόγια και καταγράψτε τις επόμενες λίγες ώρες εκτέλεσης. Η επεξήγηση cron κάνει και τα δύο, και είναι ο πιο γρήγορος τρόπος να εντοπίσετε τον κανόνα του «είτε-είτε» ή ένα περίεργο βήμα.

Σύντομες απαντήσεις

Είναι το πρώτο πεδίο λεπτά ή δευτερόλεπτα;

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

Γιατί η εργασία μου εκτελείται τις Παρασκευές και επίσης στις 13;

Και τα πεδία ημέρας του μήνα και ημέρας της εβδομάδας είναι ορισμένα, οπότε η εργασία εκτελείται όταν ταιριάζει το ένα από τα δύο. Ορίστε ένα πεδίο σε * αν θέλετε μόνο το άλλο.

Το cron χρησιμοποιεί UTC;

Μόνο αν το μηχάνημα ή η υπηρεσία είναι ρυθμισμένη σε UTC. Διαφορετικά χρησιμοποιεί την τοπική ζώνη ώρας του συστήματος.

Μετάφραση από το Αγγλικό πρωτότυπο με τη βοήθεια τεχνητής νοημοσύνης.

Σχόλια

    Δεν υπάρχουν σχόλια ακόμη. Γίνετε οι πρώτοι.

    Η βαθμολογία σας (προαιρετικό)

    Το email σας δεν εμφανίζεται ούτε αποθηκεύεται ποτέ.

    Εξώφυλλο του Agentic AI in the BrowserAgentic AI in the Browser

    Περιπτώσεις χρήσης για ροές εργασίας τεχνητής νοημοσύνης που τρέχουν μέσα στον περιηγητή, με προτεραιότητα στο απόρρητο: η ίδια ιδέα του «κάνε το στη συσκευή σου» πάνω στην οποία βασίζεται το fixmint.

    $4.99Αγοράστε στο GumroadΣτα αγγλικά