Utilia

Δημιουργός εκφράσεων Cron

Δημιουργήστε μια έκφραση cron πεδίο προς πεδίο, δείτε τις επόμενες εκτελέσεις σε οποιαδήποτε ζώνη ώρας και μετατρέψτε την σε μορφή systemd, Quartz ή AWS.

Εργαλείο δημιουργίας

ΠεδίοΛειτουργίαΤιμή
Λεπτό0–59
Ώρα0–23
Ημέρα του μήνα1–31, L
Μήνας1–12 ή JAN–DEC
Ημέρα της εβδομάδας0–7 (0 και 7 = Κυριακή) ή SUN–SAT

Πώς να δημιουργήσετε μια έκφραση cron

  1. Πληκτρολογήστε ή επικολλήστε μια έκφραση στο Έκφραση cron ή διαλέξτε μία από τις Προεπιλογές. Γίνονται δεκτές και συντομεύσεις όπως @daily ή @weekly.
  2. Ή χρησιμοποιήστε το Εργαλείο δημιουργίας: για κάθε πεδίο επιλέξτε μια Λειτουργία (Κάθε, Κάθε N, Συγκεκριμένες τιμές, Εύρος ή Προσαρμοσμένο) και συμπληρώστε την Τιμή. Η έκφραση ενημερώνεται καθώς προχωράτε και η επεξεργασία της έκφρασης ενημερώνει το εργαλείο δημιουργίας.
  3. Επιλέξτε Προσθήκη πεδίου δευτερολέπτων (6 πεδία) αν ο προγραμματιστής εργασιών σας υποστηρίζει δευτερόλεπτα.
  4. Διαβάστε το χρονοδιάγραμμα Με απλά λόγια (η περιγραφή στα ελληνικά δεν είναι διαθέσιμη· εμφανίζεται στα αγγλικά) και ελέγξτε τη λίστα Επόμενες εκτελέσεις. Επιλέξτε τη Ζώνη ώρας του διακομιστή που εκτελεί την εργασία και Πόσες εκτελέσεις θα εμφανίζονται.
  5. Αντιγράψτε την έκφραση με το Αντιγραφή ή χρησιμοποιήστε μία από τις Άλλες μορφές.

Τα σφάλματα εξηγούνται πεδίο προς πεδίο, για παράδειγμα «Λεπτό: το 61 είναι εκτός ορίων (0–59)», ώστε να ξέρετε ακριβώς τι να διορθώσετε.

Τα πέντε πεδία του cron

Μια τυπική γραμμή cron (Vixie) έχει πέντε πεδία και μετά την εντολή:

Πεδίο Επιτρεπόμενες τιμές
Λεπτό 0–59
Ώρα 0–23
Ημέρα του μήνα 1–31
Μήνας 1–12 ή JAN–DEC
Ημέρα της εβδομάδας 0–7 (το 0 και το 7 είναι Κυριακή) ή SUN–SAT

Κάθε πεδίο δέχεται * (κάθε τιμή), λίστα 1,15, εύρος 9-17, βήμα */15 (κάθε 15 μονάδες) ή εύρος με βήμα 0-30/10. Έτσι το */15 9-17 * * 1-5 σημαίνει κάθε 15 λεπτά από τις 9:00 έως τις 17:45, Δευτέρα έως Παρασκευή.

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

Ώρες επόμενης εκτέλεσης και ζώνες ώρας

Το cron χρησιμοποιεί το ρολόι του μηχανήματος ή τη ρύθμιση CRON_TZ/TZ του crontab. Η λίστα Επόμενες εκτελέσεις υπολογίζεται για τη ζώνη ώρας που επιλέγετε, συμπεριλαμβανομένων των αλλαγών θερινής ώρας: την άνοιξη μια εργασία στις 2:30 μπορεί να παραλειφθεί, ενώ το φθινόπωρο μπορεί να εκτελεστεί μία ή δύο φορές, ανάλογα με την υλοποίηση. Για εργασίες που πρέπει να εκτελούνται ακριβώς μία φορά, προτιμήστε ώρες εκτός του διαστήματος 1:00–3:00 ή χρησιμοποιήστε UTC.

Vixie cron, χρονοδιακόπτες systemd, Quartz και AWS

  • Οι χρονοδιακόπτες systemd χρησιμοποιούν το OnCalendar= με διαφορετική σύνταξη: Mon..Fri *-*-* 09..17:00/15:00. Οι συνθήκες ημέρας της εβδομάδας και ημερομηνίας συνδυάζονται με AND και όχι με OR, οπότε ορισμένες εκφράσεις cron δεν έχουν ακριβές ισοδύναμο.
  • Τα Quartz και Spring βάζουν πρώτο ένα πεδίο δευτερολέπτων και μπορεί να προσθέτουν πεδίο έτους. Ένα από τα δύο πεδία ημέρας πρέπει να είναι ? και το Quartz αριθμεί τις ημέρες 1–7 ξεκινώντας από την Κυριακή, σε αντίθεση με το 0–6 του cron. Το εργαλείο γράφει τις ημέρες ως ονόματα (MON-FRI) για να αποφύγει αυτή την παγίδα.
  • Το AWS EventBridge χρησιμοποιεί cron(λεπτά ώρες ημέρα μήνας ημέρα-εβδομάδας έτος): έξι πεδία, χωρίς δευτερόλεπτα, ένα ? σε ένα από τα πεδία ημέρας και το έτος στο τέλος.

Το τυπικό cron δεν έχει πεδίο δευτερολέπτων. Η μορφή 6 πεδίων με δευτερόλεπτα υποστηρίζεται από πολλές βιβλιοθήκες (node-cron, Spring, Quartz), όχι όμως από το crontab του συστήματος. Όλοι οι υπολογισμοί γίνονται τοπικά στο πρόγραμμα περιήγησής σας.

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

Πώς εκτελώ μια εργασία κάθε 5 λεπτά;

Χρησιμοποιήστε */5 * * * *. Η εργασία εκτελείται στα λεπτά 0, 5, 10… κάθε ώρας.

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

Πολλοί προγραμματιστές εργασιών δέχονται L στο πεδίο ημέρας του μήνα: 0 18 L * *. Με απλό Vixie cron, εκτελέστε την εργασία καθημερινά τις ημέρες 28–31 και ελέγξτε μέσα στο σενάριο αν η αυριανή είναι η 1η.

Τι κάνει το @reboot;

Εκτελεί την εντολή μία φορά, όταν ξεκινά ο δαίμονας cron. Δεν έχει χρονοδιάγραμμα, οπότε το εργαλείο δεν μπορεί να εμφανίσει ώρες εκτέλεσης για αυτό.

Γιατί η εργασία μου δεν εκτελείται την ώρα που φαίνεται;

Ελέγξτε τη ζώνη ώρας του διακομιστή, το crontab του χρήστη σε σχέση με το /etc/crontab (που έχει επιπλέον πεδίο χρήστη) και το PATH: το cron ξεκινά με ελάχιστο περιβάλλον.

Το 0 ή το 7 είναι Κυριακή;

Και τα δύο. Στο πεδίο ημέρας της εβδομάδας, το 0 και το 7 σημαίνουν Κυριακή, το 1 Δευτέρα και το 6 Σάββατο.