Android

Προγραμματισμός εργασιών cron με crontab

Embedded Linux Conference 2013 - Task Scheduling for Multicore Embedded Devices

Embedded Linux Conference 2013 - Task Scheduling for Multicore Embedded Devices

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

Anonim

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

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

Οι εργασίες cron μπορούν να προγραμματιστούν για ένα λεπτό, ώρα, ημέρα του μήνα, μήνα, ημέρα της εβδομάδας ή οποιοδήποτε συνδυασμό αυτών.

Τι είναι το αρχείο Crontab

Το Crontab (πίνακας cron) είναι ένα αρχείο κειμένου που καθορίζει το χρονοδιάγραμμα των εργασιών cron. Υπάρχουν δύο τύποι αρχείων crontab. Τα αρχεία crontab σε όλο το σύστημα και τα μεμονωμένα αρχεία crontab χρηστών.

Τα αρχεία crontab των χρηστών αποθηκεύονται από το όνομα του χρήστη και η θέση τους ποικίλλει ανάλογα με τα λειτουργικά συστήματα. Στο σύστημα που βασίζεται στο Red Hat, όπως το CentOS, τα αρχεία crontab αποθηκεύονται στον κατάλογο /var/spool/cron ενώ τα αρχεία του Debian και του Ubuntu αποθηκεύονται στον κατάλογο /var/spool/cron/crontabs .

Παρόλο που μπορείτε να επεξεργαστείτε τα αρχεία crontab του χρήστη με μη αυτόματο τρόπο, συνιστάται να χρησιμοποιήσετε την εντολή crontab .

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

Στις περισσότερες διανομές Linux μπορείτε επίσης να βάλετε σενάρια μέσα στους /etc/cron.{hourly, daily, weekly, monthly} καταλόγους και τα scripts θα εκτελούνται κάθε hour/day/week/month .

Σύνταξη Crontab και χειριστές

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

* * * * * command(s) - - - - - | | | | | | | | | ----- Day of week (0 - 7) (Sunday=0 or 7) | | | ------- Month (1 - 12) | | --------- Day of month (1 - 31) | ----------- Hour (0 - 23) ------------- Minute (0 - 59)

Τα πρώτα πέντε πεδία μπορεί να περιέχουν μία ή περισσότερες τιμές, χωρισμένες με κόμμα ή με ένα εύρος τιμών που χωρίζονται με παύλα.

  • * -Ο χειριστής με αστερίσκο νοείται οποιαδήποτε τιμή ή πάντα. Εάν έχετε το σύμβολο αστερίσκου στο πεδίο Hour, σημαίνει ότι η εργασία θα εκτελείται κάθε ώρα. , -Ο χειριστής με κόμμα σας επιτρέπει να καθορίσετε μια λίστα τιμών για επανάληψη. Για παράδειγμα, αν έχετε 1, 3, 5 στο πεδίο Ωράριο, η εργασία θα τρέξει στις 1 π.μ., 3 π.μ. και 5 π.μ. - -Ο τελεστής παύλας σας επιτρέπει να ορίσετε μια σειρά τιμών. Αν έχετε 1-5 στο πεδίο Ημέρα της εβδομάδας, η εργασία θα τρέξει κάθε βδομάδα (Από Δευτέρα έως Παρασκευή). / -Ο τελεστής κάθετης σάς επιτρέπει να καθορίσετε τιμές που θα επαναλαμβάνονται σε ένα συγκεκριμένο διάστημα μεταξύ τους. Για παράδειγμα, εάν έχετε */4 στο πεδίο Hour, σημαίνει ότι η ενέργεια θα πραγματοποιηθεί κάθε τέσσερις ώρες. Είναι ίδιο με τον προσδιορισμό των 0, 4, 8, 12, 16, 20 . Αντί του αστερίσκου πριν από τον τελεστή κάθετο, μπορείτε επίσης να χρησιμοποιήσετε ένα εύρος τιμών, 1-30/10 σημαίνει το ίδιο με 1, 11, 21 .

Αρχεία Crontab σε όλο το σύστημα

Η σύνταξη των αρχείων crontab σε όλο το σύστημα είναι ελαφρώς διαφορετική από τα crontabs του χρήστη. Περιέχει ένα επιπλέον υποχρεωτικό πεδίο χρήστη που καθορίζει ποιος χρήστης θα εκτελέσει την εργασία cron.

* * * * * command(s) * * * * * command(s)

Προκαθορισμένες μακροεντολές

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

  • @yearly @annually ) - Εκτελέστε την καθορισμένη εργασία μία φορά το χρόνο τα μεσάνυχτα (12:00 π.μ.) της 1ης Ιανουαρίου. Ισοδύναμο με το 0 0 1 1 * . @monthly - Εκτελέστε την καθορισμένη εργασία μία φορά το μήνα τα μεσάνυχτα την πρώτη ημέρα του μήνα. Ισοδύναμο με 0 0 1 * * . @weekly - Εκτελέστε την καθορισμένη εργασία μία φορά την εβδομάδα τα μεσάνυχτα της Κυριακής. Αντιστοιχεί στο 0 0 * * 0 . @daily - Εκτελέστε την καθορισμένη εργασία μία φορά την ημέρα τα μεσάνυχτα. Ισοδύναμο με 0 0 * * * . @hourly - Εκτελέστε την καθορισμένη εργασία μία φορά την ώρα στην αρχή της ώρας. Ισοδύναμο με 0 * * * * . @reboot - Εκτελέστε την καθορισμένη εργασία κατά την εκκίνηση του συστήματος (ώρα εκκίνησης).

Η εντολή Crontab του Linux

Η εντολή crontab σάς επιτρέπει να εγκαταστήσετε ή να ανοίξετε ένα αρχείο crontab για επεξεργασία.

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

  • crontab -e - Επεξεργαστείτε το αρχείο crontab ή δημιουργήστε ένα, αν δεν υπάρχει ήδη. crontab -l - Εμφάνιση περιεχομένων αρχείου crontab. crontab -r - Αφαιρέστε το τρέχον αρχείο crontab. crontab -i - Καταργήστε το τρέχον αρχείο crontab με μια προτροπή πριν την κατάργηση. crontab -u - Επεξεργασία άλλου αρχείου crontab. Απαιτεί δικαιώματα διαχειριστή συστήματος.

Η εντολή crontab ανοίγει το αρχείο crontab χρησιμοποιώντας το πρόγραμμα επεξεργασίας που καθορίζεται από τις μεταβλητές περιβάλλοντος VISUAL ή EDITOR .

Μεταβλητές Crontab

Ο δαίμονας cron ορίζει αυτόματα πολλές μεταβλητές περιβάλλοντος.

  • Η προεπιλεγμένη διαδρομή έχει οριστεί σε PATH=/usr/bin:/bin . Εάν η εντολή που καλείτε υπάρχει στην καθορισμένη διαδρομή cron, μπορείτε είτε να χρησιμοποιήσετε την απόλυτη διαδρομή στην εντολή είτε να αλλάξετε τη μεταβλητή cron $PATH . Δεν μπορείτε να προσθέσετε σιωπηρά :$PATH όπως θα κάνατε με ένα κανονικό script.The προεπιλεγμένο κέλυφος έχει οριστεί σε /bin/sh . Μπορείτε να ορίσετε ένα διαφορετικό κέλυφος, αλλάζοντας το SHELL variable.Cron επικαλείται την εντολή από τον αρχικό κατάλογο του χρήστη. Η μεταβλητή HOME μπορεί να αντικατασταθεί από τις ρυθμίσεις στο crontab. Η ειδοποίηση μέσω ηλεκτρονικού ταχυδρομείου αποστέλλεται στον κάτοχο του crontab. Για να αντικαταστήσετε την προεπιλεγμένη συμπεριφορά, μπορείτε να χρησιμοποιήσετε τη μεταβλητή περιβάλλοντος MAILTO με μια λίστα (διαχωρισμένη με κόμμα) όλων των διευθύνσεων ηλεκτρονικού ταχυδρομείου που θέλετε να λάβετε οι ειδοποιήσεις ηλεκτρονικού ταχυδρομείου. Αν το MAILTO είναι καθορισμένο αλλά κενό ( MAILTO="" ), δεν αποστέλλεται μήνυμα ηλεκτρονικού ταχυδρομείου.

Περιορισμοί Crontab

Οι διαχειριστές συστημάτων μπορούν να ελέγξουν ποιοι χρήστες έχουν πρόσβαση στην εντολή crontab χρησιμοποιώντας τα αρχεία /etc/cron.deny και /etc/cron.allow . Τα αρχεία αποτελούνται από μια λίστα με ονόματα χρήστη, ένα όνομα χρήστη ανά γραμμή.

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

Εάν το αρχείο /etc/cron.allow υπάρχει μόνο οι χρήστες που παρατίθενται σε αυτό το αρχείο, μπορείτε να χρησιμοποιήσετε την εντολή crontab .

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

Παραδείγματα εργασίας Cron

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

  • Εκτελέστε εντολή στις 15:00 κάθε μέρα από Δευτέρα έως Παρασκευή:

    0 15 * * 1-5 command

    Εκτελέστε μια δέσμη ενεργειών κάθε 5 λεπτά και ανακατευθύνετε την τυπική έξοδο σε dev null , μόνο το τυπικό σφάλμα θα σταλεί στην καθορισμένη διεύθυνση ηλεκτρονικού ταχυδρομείου:

    [email protected] */5 * * * * /path/to/script.sh > /dev/null

    Εκτελέστε δύο εντολές κάθε Δευτέρα στις 3 μ.μ. (χρησιμοποιήστε τον χειριστή && μεταξύ των εντολών):

    0 15 * * Mon command1 && command2

    Εκτελέστε μια δέσμη ενεργειών PHP κάθε 2 λεπτά και γράψτε την έξοδο σε ένα αρχείο:

    */2 * * * * /usr/bin/php /path/to/script.php >> /var/log/script.log

    Εκτελέστε σενάριο κάθε μέρα, κάθε ώρα, την ώρα, από τις 8 π.μ. έως τις 4 μ.μ.:

    00 08-16 * * * /path/to/script.sh

    Εκτελέστε μια δέσμη ενεργειών την πρώτη Δευτέρα κάθε μήνα, στις 7 π.μ.

    0 7 1-7 * 1 /path/to/script.sh

    Εκτελέστε το σενάριο στις 9:15 μ.μ., την 1η και 15η κάθε μήνα:

    15 9 1, 15 * * /path/to/script.sh

    Ορίστε προσαρμοσμένες PATH HOME , PATH , SHELL και MAILTO και εκτελέστε μια εντολή κάθε λεπτό.

    HOME=/opt PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin SHELL=/usr/bin/zsh [email protected] */1 * * * * command

συμπέρασμα

Έχετε μάθει πώς να δημιουργείτε εργασίες cron και να προγραμματίζετε εργασίες σε συγκεκριμένη ημερομηνία και ώρα.

Μη διστάσετε να αφήσετε ένα σχόλιο εάν έχετε οποιεσδήποτε ερωτήσεις.

cron crontab