Crontab σε Linux – με παραδείγματα και εργαλεία σε πραγματικό χρόνο

Ας εξερευνήσουμε το crontab, τις εντολές του και διάφορες λειτουργίες που σχετίζονται με το Crontab.

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

Πίνακας περιεχομένων

Προέλευση

Το Crontab σημαίνει “cron table”. Η λέξη cron έχει παρθεί από την ελληνική λέξη Chronos που σημαίνει χρόνος. Το Crontab είναι μια διαδικασία δαίμονα συστήματος που θα εκτελέσει αυτόματα ορισμένες εργασίες και εργασίες σύμφωνα με την προγραμματισμένη ώρα.

  Last Light Redux σε Linux

Θήκες χρήσης

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

Χρησιμοποιώντας το cron, ένας διαχειριστής μπορεί να προγραμματίσει μια εργασία για εκτέλεση συγκεκριμένης ώρας και ημέρας.

Ας δούμε λοιπόν πώς μπορούμε να το ρυθμίσουμε.

Σύνταξη Crontab

Για να εκτελέσετε μια λίστα εντολών, το βοηθητικό πρόγραμμα cron διαβάζει τα αρχεία διαμόρφωσης. Για την ερμηνεία των γραμμών στους πίνακες διαμόρφωσης crontab, ακολουθεί μια σύνταξη Crontab. Το Crontab έχει έξι πεδία και τα πρώτα πέντε (1-5) πεδία ορίζουν την ημερομηνία και την ώρα εκτέλεσης. Το τελευταίο πεδίο, δηλαδή το 6ο πεδίο, θα μπορούσε να είναι ένα όνομα χρήστη ή/και μια εργασία /job/command/script που θα εκτελεστεί.

* * * * * USER_NAME ΕΝΤΟΛΗ/ΣΕΝΑΡΙΟ-ΓΙΑ-ΕΚΤΕΛΕΣΗ

│ │ │ │ │
│ │ │ │ │
│ │ │ │ |_________ Ημέρα της εβδομάδας (0 – 6) (0 είναι Κυριακή ή χρησιμοποιήστε ονόματα)
│ │ │ |____________ Μήνας (1 – 12),* σημαίνει κάθε μήνα
│ │ |______________ Ημέρα του μήνα (1 – 31),* σημαίνει κάθε μέρα
│ |________________ Ώρα (0 – 23),* σημαίνει κάθε ώρα
|___________________ Λεπτό (0 – 59), * σημαίνει κάθε λεπτό

Σημειώσεις:

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

Το όνομα χρήστη είναι προαιρετικό (διαθέσιμο μόνο εάν είναι το αρχείο crontab του συστήματος)

Παραδείγματα:

Ας κατανοήσουμε την παραπάνω σύνταξη με μερικά παραδείγματα

0 5 * * * /scripts/job.sh

1. Προγραμματίστε ένα cron για εκτέλεση στις 5 π.μ. καθημερινά

0 6,18 * * * /scripts/job.sh

2. Προγραμματίστε ένα cron για εκτέλεση δύο φορές την ημέρα στις 6 π.μ. και στις 6 μ.μ

* * * * * /scripts/job.sh

3. Προγραμματίστε ένα cron για εκτέλεση κάθε λεπτό

0 19 * * mon /scripts/job.sh

4. Προγραμματίστε ένα cron για εκτέλεση κάθε Δευτέρα στις 7 μ.μ.

*/10 * * * * /scripts/job.sh

5. Προγραμματίστε ένα cron να εκτελείται κάθε 15 λεπτά.

* * * feb,jun,oct * /script/job.sh

6. Προγραμματίστε ένα cron για εκτέλεση σε επιλεγμένους μήνες

25 7 4 3 * /home/script/backup.sh

7. Εκτελέστε το σενάριο κελύφους /home/script/backup.sh στις 4 Μαρτίου στις 7:25 π.μ.

8. Προγραμματίστε ένα cron να εκτελείται κάθε 30 δευτερόλεπτα

  • Δεδομένου ότι δεν έχουμε τον έλεγχο των δευτερολέπτων στο Crontab, αλλά μπορούμε να το επιτύχουμε μέσω της παρακάτω διαδικασίας δύο βημάτων.
* * * * * /home/scripts/script.sh
  • Ας προγραμματίσουμε πρώτα μια εργασία που εκτελείται κάθε λεπτό.
* * * * * sleep 30; /home/scripts/script.sh

Τώρα ας χρησιμοποιήσουμε την εντολή ύπνου για να σταματήσουμε την εκτέλεση για 30 δευτερόλεπτα.

  Πώς να ελέγξετε την πρόσβαση sudo στο Linux

Η παραπάνω εργασία θα σταματήσει την εκτέλεση για 30 δευτερόλεπτα και θα συνεχίσει ξανά.

Τύπος αρχείων διαμόρφωσης Cron

Υπάρχουν δύο τύποι αρχείων διαμόρφωσης Cron:

Το Crontab του συστήματος UNIX/Linux

Αυτό απαιτεί δικαιώματα root επειδή συνήθως χρησιμοποιείται για υπηρεσίες συστήματος και κρίσιμες εργασίες. Το έκτο πεδίο (στην παραπάνω περιγραφή σύνταξης) είναι το όνομα ενός χρήστη για την εκτέλεση της εντολής ως. Δίνει τη δυνατότητα στο crontab του συστήματος να εκτελεί εντολές όπως οποιοσδήποτε χρήστης.

Το User Crontab

Ένας χρήστης μπορεί επίσης να εγκαταστήσει τις δικές του εργασίες cron χρησιμοποιώντας την εντολή crontab. Εδώ επίσης, το έκτο πεδίο (στην παραπάνω περιγραφή σύνταξης) είναι η εντολή για εκτέλεση και όλες οι εντολές εκτελούνται ως ο χρήστης που δημιούργησε το crontab. Κάθε χρήστης μπορεί να έχει το δικό του αρχείο crontab και παρόλο που αυτά είναι αρχεία στο /var/spool/cron/crontabs, δεν προορίζονται για άμεση επεξεργασία. Πρέπει να χρησιμοποιήσουμε την εντολή crontab για την επεξεργασία ή τη ρύθμιση των δικών μας εργασιών cron.

Πώς λειτουργεί; Η υπηρεσία cron (daemon) εκτελείται στο παρασκήνιο και ελέγχει συνεχώς (κάθε λεπτό) το αρχείο /etc/crontab και τους καταλόγους /etc/cron.*/. Ελέγχει επίσης τον κατάλογο /var/spool/cron/. Οι εντολές εκτελούνται από cron

όταν τα πεδία λεπτά, ώρα και μήνα ταιριάζουν με την τρέχουσα ώρα και τουλάχιστον ένα από τα πεδία δύο ημερών (ημέρα του μήνα ή ημέρα της εβδομάδας) ταιριάζει με την τρέχουσα ημέρα.

Βασικές εντολές

Καταχώρηση υπαρχουσών εργασιών Cron

crontab -l

Μπορούμε να παραθέσουμε όλες τις εργασίες Cron χωρίς να ανοίξουμε το αρχείο διαμόρφωσης crontab χρησιμοποιώντας την παρακάτω εντολή

[[email protected] ~]# crontab -l
no crontab for grtechpc.org
[[email protected] ~]#

Εάν δεν υπάρχει υπάρχουσα εργασία, θα επιστρέψει την έξοδο ως

[[email protected] ~]# crontab -l
# Edit this file to introduce tasks to be run by cron.
#
# Each task to run has to be defined through a single line
# indicating with different fields when the task will be run
# and what command to run for the task
#
# To define the time you can provide concrete values for
# minute (m), hour (h), day of month (dom), month (mon),
# and day of week (dow) or use '*' in these fields (for 'any').#
# Notice that tasks will be started based on the cron's system
# daemon's notion of time and timezones.
#
# Output of the crontab jobs (including errors) is sent through
# email to the user the crontab file belongs to (unless redirected).
#
# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
#
# For more information see the manual pages of crontab(5) and cron(8)
#
# m h  dom mon dow   command
0 */1 * * * /home/account/scripts/updateAccountStatuses.sh
0 */1 * * * /home/account/scripts/reActivateAccountStatus.sh
[[email protected] ~]#

Εάν ο χρήστης έχει ήδη προσθέσει κάποιες από τις εργασίες, θα εμφανιστεί ως εξής.

Ο πίνακας Cron είναι συγκεκριμένος χρήστης, πράγμα που σημαίνει ότι πρέπει να συνδεθείτε με έναν συγκεκριμένο χρήστη για να δείτε τη λίστα του πίνακα cron.

Λίστα Cron για συγκεκριμένο χρήστη

Για να παραθέσετε προγραμματισμένες εργασίες άλλου χρήστη, χρησιμοποιήστε την επιλογή ως -u (Χρήστης) και -l (Λίστα).

crontab -u Another_username -l

Παράδειγμα: crontab -u grtechpc.org -l

Προσθήκη/Τροποποίηση καταχωρήσεων Crontab

Για να επεξεργαστούμε την καταχώρηση crontab, μπορούμε να χρησιμοποιήσουμε την επιλογή -e όπως φαίνεται παρακάτω.

  Πώς να μοιράζεστε αρχεία στο Tor από το Linux με το Onion Share

crontab -ε

Η παραπάνω εντολή θα ανοίξει τους επεξεργαστές vi όπου καθορίζετε τις λεπτομέρειες της εργασίας και αποθηκεύετε το αρχείο. Μόλις αποθηκευτεί, μπορείτε να επαληθεύσετε εάν το cron έχει ρυθμιστεί ή όχι με το crontab -l.

Προσθήκη/Τροποποίηση καταχωρίσεων Crontab για συγκεκριμένο χρήστη

crontab -u another_username -e

Μπορούμε να επεξεργαστούμε το crontab για έναν άλλο χρήστη χρησιμοποιώντας την παρακάτω εντολή

Παράδειγμα: crontab -u grtechpc.org -e

Καταργήστε την καταχώριση Crontab

Χρησιμοποιήστε την παράμετρο -r με το Crontab για να καταργήσετε πλήρεις προγραμματισμένες εργασίες χωρίς επιβεβαίωση από το crontab

crontab -r

crontab -i -r
[[email protected] ~]# crontab -i -r
crontab: really delete grtechpc.org's crontab?

Εάν θέλετε επιβεβαίωση πριν από τη διαγραφή προγραμματισμένων εργασιών, χρησιμοποιήστε την επιλογή -i με -r, η οποία θα ζητήσει επιβεβαίωση από τον χρήστη πριν διαγράψει το crontab του χρήστη.

Ειδική χορδή Crontab

Εκτός από την παραπάνω σύνταξη που συζητήσαμε, μπορούμε επίσης να χρησιμοποιήσουμε οκτώ ειδικές συμβολοσειρές που παρέχονται από το Crontab. Όχι μόνο θα εξοικονομήσει χρόνο αλλά θα βελτιώσει και την αναγνωσιμότητα.
Ειδική χορδή
Περιγραφή
@reboot
Εκτελέστε μία φορά, μετά την εκκίνηση.
@ετήσια
Τρέξτε μια φορά το χρόνο, π.χ. 0 0 1 1 *
@ετησίως
Το ίδιο με το @yearly
@Μηνιαίο
Τρέξτε μια φορά το μήνα, π.χ., 0 0 1 * *
@εβδομαδιαίος
Τρέξτε μία φορά την εβδομάδα, δηλαδή 0 0 * * 0
@καθημερινά
Τρέξτε μία φορά την ημέρα, π.χ. 0 0 * * *
@μεσάνυχτα
Το ίδιο με το @daily
@ωριαίος

Τρέξτε μια φορά την ώρα, π.χ. 0 * * * *

Παραδείγματα ειδικών χορδών Crontab

1. Crontab να προγραμματίζει εργασίες σε ετήσια βάση

@yearly /scripts/greeting.sh

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

2. Το Crontab να προγραμματίζει εργασίες που θα εκτελούνται σε μηνιαία βάση.

@monthly /scripts/cleanup.sh

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

Ομοίως, μπορούμε να χρησιμοποιήσουμε άλλη ειδική συμβολοσειρά Crontab για εβδομαδιαίους, ημερήσιους και ωριαίους σκοπούς.

Κατάλογος Cron

  • Ο διαχειριστής του συστήματος μπορεί να χρησιμοποιήσει ένα χρονοδιάγραμμα cron σε όλο το σύστημα που βρίσκεται στον προκαθορισμένο κατάλογο cron όπως φαίνεται παρακάτω
  • /etc/cron.d
  • /etc/cron.daily
  • /etc/cron.hourly
  • /etc/cron.monthly

/etc/cron.weekly

Παραδείγματα Crontab σε πραγματικό χρόνο

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

Διαγράψτε τα κενά αρχεία και τον κατάλογο

45 0 * * * grtechpc.org find /tmp -type f -empty -delete

Πάνω από την έκφραση cron θα βρει τα κενά αρχεία και τον κατάλογο από τον κατάλογο /tmp και θα τα διαγράψει. Αυτή η εργασία θα λειτουργεί στις 12.45 π.μ. σε καθημερινή βάση. Πρέπει να αναφέρουμε το όνομα χρήστη για να εκτελέσουμε αυτήν την εργασία. Στο παραπάνω παράδειγμα, ο χρήστης grtechpc.org εκτελεί τη λειτουργία cron job.

Εκτελέστε πολλαπλές εργασίες χρησιμοποιώντας ένα μόνο cron

* * * * * /home/scripts/backup.sh; /home/scripts/scritp.sh

Πολλαπλές εργασίες/εργασίες μπορούν να διαχωριστούν χρησιμοποιώντας ένα ερωτηματικό(;) και μπορούν να αντιστοιχιστούν σε μία έκφραση cron.

Εργαλεία μορφοποίησης και δοκιμής Cron

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

Υπάρχουν πολλά εργαλεία μορφοποίησης Cron διαθέσιμα στο διαδίκτυο.

# 1. Cron Job Generator Cron Job Generator

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

Ας πάρουμε ένα παράδειγμα σε πραγματικό χρόνο όπου πρέπει να εκτελώ το /home/processMonitor.sh κάθε 5 λεπτά από Δευτέρα έως Παρασκευή.

Έτσι, πήρα την παρακάτω σύνταξη Cron την οποία μπορώ να βάλω στο crontab μου εκτελώντας
crontab –ε

0,5,10,15,20,25,30,35,40,45,50,55 * * * 1-5 /home/processMonitor.sh

# 2. Easycron Easycron

είναι ένας χρήσιμος προγραμματιστής εργασιών cron που βασίζεται στο web. Μπορούμε να δημιουργήσουμε μια εργασία cron καθορίζοντας μια διεύθυνση URL για κλήση, μπορούμε να ορίσουμε την ώρα που θα πρέπει να εκτελεστεί. Μπορούμε επίσης να καθορίσουμε μια έκφραση cron ή να την προσθέσουμε χειροκίνητα από μια περιγραφική φόρμα. Είναι σημαντικό ότι μπορούμε προαιρετικά να χρησιμοποιήσουμε βασικό έλεγχο ταυτότητας HTTP για ένα μικρό επίπεδο ασφάλειας.

Όχι μόνο αυτό, αλλά το Easycron μπορεί επίσης να χρησιμοποιηθεί για την επίτευξη άλλων σκοπών όπως η τυπική έκφραση Cron, τα αρχεία καταγραφής εκτέλεσης εργασιών Cron, η ειδοποίηση μέσω email, τα ξεχωριστά αρχεία καταγραφής αποτυχίας κ.λπ.

# 3. Γεννήτρια Crontab Γεννήτρια Crontab

είναι ένα άλλο εύχρηστο εργαλείο για τη δημιουργία crontab και με αυτό το εργαλείο, μπορείτε επίσης να προσθέσετε εάν θέλετε να αποθηκεύσετε την έξοδο cron στο αρχείο ή να το στείλετε σε email.

# 4. Γκουρού Crontab Γκουρού Crontab

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

Στο παρακάτω παράδειγμα, το Job θα εκτελείται στις 04:05, κάθε μέρα, κάθε μήνα και κάθε εβδομάδα.

# 5. Ελεγκτής CRON CRON Tester

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

Για να το κάνουμε αυτό, μπορούμε να χρησιμοποιήσουμε αυτό το εργαλείο. Το μόνο που χρειάζεται να κάνουμε είναι να αντιγράψουμε και να επικολλήσουμε την έκφρασή μας cron στο πεδίο ορισμού cron, στη συνέχεια να επιλέξουμε τον αριθμό των επαναλήψεων και να κάνουμε κλικ στο Test για να δούμε τις διάφορες ημερομηνίες στις οποίες θα εκτελεστεί.

Ας ελέγξουμε μία από τις εκφράσεις cron μας 4 3 */2 * *, η οποία θα πρέπει να εκτελείται στις 03:04(AM) κάθε δύο ημέρες. Ας το επαληθεύσουμε με το cron tester.

συμπέρασμα Ελπίζω τα παραπάνω να σας βοηθήσουν να κατανοήσετε καλύτερα το Crontab και να ρυθμίσετε τις εργασίες cron. Ο προγραμματισμός εργασιών μέσω του Cron είναι μία από τις πολλές εργασίες που εκτελούνται από το Linux Admin. Εάν ενδιαφέρεστε να μάθετε τις προηγμένες δεξιότητες, ελέγξτε αυτόσειρά μαθημάτων

.