Cron & crontab, εξήγησε

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

Τι είναι το cron;

Το όνομα cron προέρχεται από τα ελληνικά χρονικά που σημαίνει "χρόνος". Στο λειτουργικό σύστημα Unix, το cron είναι ένας κανονικός διαχειριστής διεργασιών παρασκηνίου (δαίμονας) που εκτελεί διεργασίες ή σενάρια σε τακτά χρονικά διαστήματα (για παράδειγμα, κάθε λεπτό, ημέρα, εβδομάδα ή μήνα). Οι διαδικασίες που πρέπει να εκτελεστούν και ο χρόνος κατά τον οποίο πρέπει να εκτελεστούν καθορίζονται στο αρχείο crontab.

έργα Κόμο

Ο δαίμονας cron ξεκινά από /etc/rc.d/ o / Etc / init.d ανάλογα με την κατανομή. Το Cron εκτελείται στο παρασκήνιο, ελέγχει τον πίνακα εργασιών crontab κάθε λεπτό / etc / crontab ή / var / spool / cron σε αναζήτηση εργασιών που πρέπει να επιτευχθούν. Ως χρήστης μπορούμε να προσθέσουμε εντολές ή σενάρια με εργασίες στο cron για να αυτοματοποιήσουμε ορισμένες διαδικασίες. Αυτό είναι χρήσιμο, για παράδειγμα, για την αυτοματοποίηση της ενημέρωσης ενός συστήματος ή ενός καλού συστήματος δημιουργίας αντιγράφων ασφαλείας.

σχετικό άρθρο:
Εκμάθηση: Εγκατάσταση πακέτων .tar.gz και .tar.bz2

Τι είναι το Crontab;

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

Το Crontab είναι ο ευκολότερος τρόπος διαχείρισης εργασιών cron σε συστήματα πολλαπλών χρηστών, είτε ως απλός χρήστης του συστήματος είτε ως χρήστης root.

Χρησιμοποιώντας crontab

Ξεκινάμε με ένα απλό παράδειγμα.

Θα αυτοματοποιήσουμε την ενημέρωση ενός συστήματος, για να εξαλείψουμε το ενοχλητικό του "Πάντα πρέπει να ενημερώνω και δεν μου αρέσει αυτό!"

πώς να
σχετικό άρθρο:
Εντολές για να γνωρίζουν το σύστημα (προσδιορισμός υλικού και ορισμένων διαμορφώσεων λογισμικού)

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

#! / bin / bash #script update παράδειγμα #επιλέξτε τη διανομή σας # debian-ubuntu # apt-get update & apt-get -y upgrade #fedora #yum -y update #Arch #pacman --noconfirm -Syu

Αφαιρέστε το # από ​​τη γραμμή διανομής σας. Σε περίπτωση που είναι Ubuntu / Debian, ξεκινά με apt-get.

Αποθηκεύουμε το σενάριο ως update.sh (π.χ. κατάλογος σεναρίων στο σπίτι σας). Αλλάζουμε τα δικαιώματα εκτέλεσης του εν λόγω σεναρίου με:

chmod a + x ~ / scripts / update.sh

Εκτελούμε το σενάριο μερικές φορές για να επαληθεύσουμε ότι όλα λειτουργούν ομαλά, τροποποιούμε ό, τι είναι απαραίτητο (δεν πρέπει να περιέχει σφάλματα, διαφορετικά το cron θα επαναλάβει μόνο ένα σφάλμα ξανά και ξανά). Τώρα για να προσθέσετε την εργασία στο crontab μας.

Προσθέστε εργασίες στο crontab

Εκτελούμε την έκδοση του crontab με crontab -e, σε μερικές διανομές (όπως το Ubuntu) μας δίνει την επιλογή να επιλέξουμε τον επεξεργαστή κειμένου που θέλουμε, το υπόλοιπο που μένει με το vi. Το αρχείο crontab θα μοιάζει με αυτό.

# mh dom mon dow εντολή χρήστη

όπου:

  • m αντιστοιχεί στο λεπτό που θα εκτελεστεί το σενάριο, η τιμή κυμαίνεται από 0 έως 59
  • h την ακριβή ώρα, χειρίζεται τη μορφή 24 ωρών, οι τιμές κυμαίνονται από 0 έως 23, με το 0 να είναι 12:00 τα μεσάνυχτα.
  • δώρο αναφέρεται στην ημέρα του μήνα, για παράδειγμα μπορείτε να καθορίσετε 15 εάν θέλετε να εκτελείτε κάθε 15 ημέρες
  • dow σημαίνει την ημέρα της εβδομάδας, μπορεί να είναι αριθμητική (0 έως 7, όπου τα 0 και 7 είναι Κυριακή) ή τα 3 πρώτα γράμματα της ημέρας στα Αγγλικά: mon, tue, wed, thu, fri, sat, sun.
  • χρήστη ορίζει τον χρήστη που θα εκτελέσει την εντολή, μπορεί να είναι root ή διαφορετικός χρήστης, εφόσον έχει δικαιώματα εκτέλεσης του σεναρίου.
  • εντολή αναφέρεται στην εντολή ή στην απόλυτη διαδρομή του σεναρίου προς εκτέλεση, για παράδειγμα: /home/usuario/scripts/update.sh, εάν καλεί ένα σενάριο πρέπει να είναι εκτελέσιμο

Για να είναι σαφή μερικά παραδείγματα εργασιών cron εξήγησαν:

15 10 * * * χρήστης /home/user/scripts/update.sh

Θα εκτελεί το σενάριο update.sh στις 10:15 π.μ. κάθε μέρα

15 22 * * * χρήστης /home/user/scripts/update.sh

Θα εκτελεί το σενάριο update.sh στις 10:15 μ.μ. κάθε μέρα

00 10 * * 0 root apt-get -y ενημέρωση Root user

Θα εκτελεί μια ενημέρωση κάθε Κυριακή στις 10:00 π.μ.

45 10 * * sun root apt-get -y ενημέρωση

Ο χρήστης Root θα εκτελεί μια ενημέρωση κάθε Κυριακή (Κυρ) στις 10:45 π.μ.

30 7 20 11 * χρήστης /home/usuario/scripts/update.sh

Στις 20 Νοεμβρίου στις 7:30 ο χρήστης θα εκτελέσει το σενάριο

30 7 11 11 sun user /home/usuario/scripts/pastel_con_velitas.sh

Στις 11 Νοεμβρίου στις 7:30 π.μ. και την Κυριακή, ο χρήστης θα γιορτάσει το sysadmin του (δηλαδή εγώ)

01 * * * * χρήστης /home/usuario/scripts/molestorecordatorio.sh

Μια ενοχλητική υπενθύμιση κάθε λεπτό κάθε ώρα κάθε μέρα (ΔΕΝ συνιστάται).

Μπορούν ακόμα να αντιμετωπιστούν ειδικές σειρές:

30 17 * * 1,2,3,4,5

Στις 5:30 το απόγευμα κάθε μέρα από Δευτέρα έως Παρασκευή.

00 12 1,15,28 * *

Στις 12 το μεσημέρι την πρώτη, δέκατη πέμπτη και 28η κάθε μήνα (ιδανικό για μισθοδοσία)

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

@reboot Εκτελέστε μία φορά, κατά την εκκίνηση
Το @yearly τρέχει μόνο μία φορά το χρόνο: 0 0 1 1 *
@ σε ετήσια βάση με το @yearly
Το @monthly εκτελείται μία φορά το μήνα, την πρώτη ημέρα: 0 0 1 * *
@ Εβδομαδιαία Εβδομαδιαία το πρώτο λεπτό της πρώτης ώρας της εβδομάδας. 0 0 * * 0 ″.
@ καθημερινά καθημερινά, στις 12:00 π.μ. 0 0 * * *
@ μεσάνυχτα ίδιο με @daily
@hourly στο πρώτο λεπτό κάθε ώρας: 0 * * * *

Η χρήση του είναι πολύ απλή.

@hourly user /home/user/scripts/molestorecordatorio.sh @monthly user /home/user/scripts/backup.sh @ καθημερινή root apt-get ενημέρωση && apt-get -y αναβάθμιση

Τελευταίο αλλά εξίσου σημαντικό:

Διαχείριση εργασίας Cron

αρχείο crontab

Αντικαταστήστε το υπάρχον αρχείο crontab με ένα αρχείο που καθορίζεται από το χρήστη

crontab -e

Επεξεργαστείτε το αρχείο crontab του χρήστη, κάθε νέα γραμμή θα είναι μια νέα εργασία crontab.

crontab -l

Λίστα όλων των εργασιών crontab του χρήστη

crontab -δ

Διαγράψτε το crontab του χρήστη

crontab -c σκην

Ορίζει τον κατάλογο crontab του χρήστη (αυτός πρέπει να έχει δικαιώματα εγγραφής και εκτέλεσης του χρήστη)

χρήστης crontab -u

πρόθεμα για χειρισμό crontab άλλου χρήστη, παραδείγματα:

$ sudo crontab -l -u root $ sudo crontab -e user2 #crontab -d -u χρήστης

Αυτό το εργαλείο, όπως και πολλά άλλα, μπορεί να προβληθεί σε μεγαλύτερο βάθος και με περισσότερες λεπτομέρειες:

Ευχαριστώ Lucain!