Τρόπος χρήσης και μαζικής χρήσης σε Linux για να προγραμματίσετε εντολές

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

Πώς να προγραμματίσετε εργασίες Linux

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

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

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

Για το πρόβλημα που περιγράφηκε παραπάνω, έχουν, και καλείται.

Εγκατάσταση του στο Command

Έπρεπε να εγκαταστήσουμε στο Ubuntu 18.04 και Manjaro 18.1.0 (ήταν ήδη εγκατεστημένο στο Fedora 31).

Για εγκατάσταση στο Ubuntu, χρησιμοποιήστε αυτήν την εντολή:

sudo apt-get install at

ο

Μετά την ολοκλήρωση της εγκατάστασης, μπορείτε να ξεκινήσετε το at daemon με αυτήν την εντολή:

sudo systemctl enable --now atd.service

ο

Στο Manjaro, εγκαθιστάτε στο με αυτήν την εντολή:

sudo pacman -Sy at

ο

Αφού ολοκληρωθεί η εγκατάσταση, πληκτρολογήστε αυτήν την εντολή για να ξεκινήσετε το at daemon:

sudo systemctl enable --now atd.service

ο

Σε οποιαδήποτε διανομή, μπορείτε να πληκτρολογήσετε αυτήν την εντολή για να βεβαιωθείτε ότι εκτελείται ο δαίμονας atd:

ps -e | grep atd

ο

Πώς να χρησιμοποιήσετε την εντολή at διαδραστικά

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

Ωστόσο, παρόλο που πρόκειται να το χρησιμοποιήσουμε διαδραστικά, πρέπει να δώσετε την ημερομηνία και την ώρα εκ των προτέρων. Εάν δεν συμπεριλάβετε τίποτα στη γραμμή εντολών ή πληκτρολογήσετε κάτι που δεν είναι ημερομηνία και ώρα, το at απαντά με “Garbled time”, όπως φαίνεται παρακάτω:

at
at banana

Μια λανθασμένη χρήση του

Οι ημερομηνίες και οι ώρες μπορεί να είναι σαφείς ή σχετικές. Για παράδειγμα, ας υποθέσουμε ότι θέλετε να εκτελέσετε μια εντολή σε ένα λεπτό από τώρα. Το at ξέρει τι σημαίνει “τώρα”, ώστε να μπορείτε να χρησιμοποιήσετε το τώρα και να προσθέσετε ένα λεπτό σε αυτό, όπως:

at now + 1 minute

ο

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

  Πώς να οργανώσετε φωτογραφίες στο Linux με το Digikam

ο

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

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

Είναι εύκολο να ελέγξετε εάν οι εντολές ή τα σενάρια σας θα εκτελούνται στο sh. Χρησιμοποιήστε την εντολή sh για να ξεκινήσετε ένα κέλυφος sh:

sh

ο

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

Για να επιστρέψετε στο κέλυφος του Bash, πληκτρολογήστε την εντολή εξόδου:

exit

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

Οποιαδήποτε έξοδος από τις εντολές —καλή ή κακή— σας αποστέλλεται μέσω email. Αποστέλλεται μέσω του εσωτερικού συστήματος αλληλογραφίας σε όποιον εκτελεί την εντολή at. Αυτό σημαίνει ότι πρέπει να ρυθμίσετε και να διαμορφώσετε αυτό το εσωτερικό σύστημα email.

Πολλά (τα περισσότερα) συστήματα Linux δεν διαθέτουν εσωτερικό σύστημα email καθώς σπάνια υπάρχει ανάγκη για ένα. Αυτά που χρησιμοποιούν συνήθως ένα σύστημα όπως αποστολή αλληλογραφίας ή postfix. Εάν το σύστημά σας δεν διαθέτει εσωτερικό σύστημα email, μπορείτε να γράψετε σενάρια σε αρχεία ή να ανακατευθύνετε την έξοδο σε αρχεία για να προσθέσετε καταγραφή.

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

Τώρα, ήρθε η ώρα να πληκτρολογήσετε μια εντολή στο. Για αυτό το παράδειγμα, θα χρησιμοποιήσουμε ένα μικρό αρχείο σεναρίου που ονομάζεται sweep.sh που διαγράφει τα αρχεία *.bak, *.tmp και *.o. Πληκτρολογήστε τη διαδρομή προς την εντολή, όπως φαίνεται παρακάτω και, στη συνέχεια, πατήστε Enter.

ο

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

Πατήστε Ctrl+D για να πείτε ότι έχετε ολοκληρώσει την προσθήκη εντολών. σε παραστάσεις , που σημαίνει τέλος μετάδοσης. Σας λένε τον αριθμό της εργασίας και πότε η εργασία έχει προγραμματιστεί να εκτελεστεί, όπως φαίνεται παρακάτω:

Επιβεβαίωση του

Μετά την εκτέλεση της εργασίας, πληκτρολογήστε τα ακόλουθα για να ελέγξετε την εσωτερική αλληλογραφία σας:

mail

ο

Εάν δεν υπάρχει αλληλογραφία, πρέπει να υποθέσετε την επιτυχία. Φυσικά, σε αυτήν την περίπτωση, μπορείτε να ελέγξετε και να δείτε εάν τα αρχεία *.bak , *.tmp και *.o διαγράφηκαν για να επιβεβαιώσετε ότι η εντολή λειτούργησε.

Πληκτρολογήστε τα παρακάτω για να εκτελέσετε ξανά το σύνολο:

at now + 1 minute

ο

Μετά από ένα λεπτό, πληκτρολογήστε τα ακόλουθα για να ελέγξετε ξανά την αλληλογραφία σας:

mail

ο

Γεια, έχουμε mail! Για να διαβάσετε το πρώτο μήνυμα, πατήστε 1 και μετά πατήστε Enter.

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

Πατήστε D+Enter για να διαγράψετε το email και Q+Enter για έξοδο από το πρόγραμμα αλληλογραφίας.

Μορφές ημερομηνίας και ώρας

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

  Πώς να χρησιμοποιήσετε την εντολή traceroute στο Linux

Τρέξιμο στις 11:00 π.μ.:

at 11:00 AM

Τρέξτε αύριο στις 11:00 π.μ.:

at 11:00 AM tomorrow

Τρέξτε στις 11:00 π.μ. αυτήν την ημέρα την επόμενη εβδομάδα:

at 11:00 AM next week

Τρέξτε αυτή τη στιγμή, αυτήν την ημέρα, την επόμενη εβδομάδα:

at next week

Τρέξτε στις 11:00 την επόμενη Παρασκευή:

at 11:00 AM next fri

Τρέξτε αυτήν την ώρα την επόμενη Παρασκευή:

at next fri

Τρέξτε στις 11:00 π.μ. αυτήν την ημερομηνία, τον επόμενο μήνα:

at 11:00 AM next month

Τρέξτε στις 11:00 π.μ. σε μια συγκεκριμένη ημερομηνία:

at 11:00 AM 3/15/2020

Τρέξτε σε 30 λεπτά από τώρα:

at now + 30 minutes

Εκτελέστε δύο ώρες από τώρα:

at now + 2 hours

Τρέξτε αυτήν την ώρα αύριο:

at tomorrow

Τρέξτε αυτήν την ώρα την Πέμπτη:

at thursday

Τρέξιμο στις 12:00 π.μ.:

at midnight

Τρέξιμο στις 12:00 μ.μ.:

at noon

Εάν είστε Βρετανός, μπορείτε ακόμη και να προγραμματίσετε μια εντολή να εκτελεστεί την ώρα του τσαγιού (4 μ.μ.):

at teatime

Κοιτάζοντας την ουρά εργασίας

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

Έξοδος από το

Για κάθε εντολή στην ουρά, το atq εμφανίζει τις ακόλουθες πληροφορίες:

Ταυτότητα εργασίας
Προγραμματισμένη ημερομηνία
ΠΡΟΓΡΑΜΜΑΤΙΣΜΕΝΗ ωρα
Ουρά η εργασία είναι μέσα. Οι ουρές φέρουν τις ετικέτες “a”, “b” και ούτω καθεξής. Οι κανονικές εργασίες με τις οποίες προγραμματίζετε στο πηγαίνουν στην ουρά “a”, ενώ οι εργασίες που προγραμματίζετε με παρτίδα (που καλύπτονται αργότερα σε αυτό το άρθρο) μπαίνουν στην ουρά “b”.
Το άτομο που προγραμμάτισε τη δουλειά.

Χρησιμοποιώντας το στη γραμμή εντολών

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

Μπορείτε να διοχετεύσετε εντολές στο στο, ως εξής:

echo "sh ~/sweep.sh" | at 08:45 AM

Ενα

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

Χρήση στο με αρχεία εντολών

Μπορείτε επίσης να αποθηκεύσετε μια ακολουθία εντολών σε ένα αρχείο και στη συνέχεια να τη μεταβιβάσετε στο. Αυτό μπορεί να είναι ένα αρχείο απλού κειμένου με εντολές—δεν χρειάζεται να είναι ένα εκτελέσιμο σενάριο.

Μπορείτε να χρησιμοποιήσετε την επιλογή -f (αρχείο) με τον ακόλουθο τρόπο για να μεταβιβάσετε ένα όνομα αρχείου στο:

at now + 5 minutes -f clean.txt

Ενα

Μπορείτε να επιτύχετε το ίδιο αποτέλεσμα εάν ανακατευθύνετε το αρχείο στη διεύθυνση:

at now + 5 minutes 

Ενα

Removing Scheduled Jobs from the Queue

To remove a scheduled job from the queue, you can use the atrm command. If you want to see the queue first to find the number of the job you want to remove, you can use atq . Then, use that job number with atrm, as shown below:

atq
atrm 11
atq

Πώς να δείτε μια λεπτομερή προβολή εργασιών

Όπως αναφέραμε προηγουμένως, μπορείτε να προγραμματίσετε εργασίες στο μέλλον. Μερικές φορές, μπορεί να ξεχάσετε τι πρόκειται να κάνει μια δουλειά. Η εντολή atq σάς δείχνει τις εργασίες στην ουρά, αλλά όχι τι πρόκειται να κάνουν. Εάν θέλετε να δείτε μια λεπτομερή προβολή μιας εργασίας, μπορείτε να χρησιμοποιήσετε την επιλογή -c (cat).

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

atq

Έξοδος από το

Τώρα, θα χρησιμοποιήσουμε τον αριθμό εργασίας 13 με την επιλογή -c:

at -c 13

ο

Ακολουθεί μια ανάλυση των πληροφοριών που λαμβάνουμε σχετικά με την εργασία:

Πρώτη γραμμή: Αυτό μας λέει ότι οι εντολές θα εκτελούνται κάτω από το κέλυφος sh.
Δεύτερη γραμμή: Βλέπουμε ότι οι εντολές θα εκτελούνται με αναγνωριστικό χρήστη και ομάδας 1000. Αυτές είναι οι τιμές για το άτομο που εκτέλεσε την εντολή at.
Τρίτη γραμμή: Το άτομο που λαμβάνει τυχόν email αποστέλλει.
Τέταρτη γραμμή: Η Μάσκα χρήστη είναι 22. Αυτή είναι η μάσκα που χρησιμοποιείται για τον ορισμό των προεπιλεγμένων δικαιωμάτων για τυχόν αρχεία που δημιουργούνται σε αυτήν την περίοδο λειτουργίας sh. Η μάσκα αφαιρείται από το 666, που μας δίνει 644 (το οκταδικό ισοδύναμο του rw-r--r--).
Υπόλοιπα δεδομένα: Η πλειοψηφία είναι μεταβλητές περιβάλλοντος.

Έξοδος από το

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

Η εντολή παρτίδας

Η εντολή παρτίδας λειτουργεί παρόμοια στην εντολή, αλλά με τρεις σημαντικές διαφορές:

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

Όταν χρησιμοποιείτε την εντολή δέσμης, την καλείτε με το όνομά της χωρίς παραμέτρους γραμμής εντολών όπως:

batch

ο

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

Έλεγχος πρόσβασης στην εντολή

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

Δείτε πώς λειτουργούν αυτά:

at.deny: Εμφανίζει εφαρμογές και οντότητες που δεν μπορούν να χρησιμοποιηθούν στο για τον προγραμματισμό εργασιών.
at.allow: Παραθέτει ποιοι μπορούν να χρησιμοποιήσουν το για να προγραμματίσουν εργασίες. Εάν το αρχείο at.allow δεν υπάρχει, το at χρησιμοποιεί μόνο το αρχείο at.deny.

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

Δείτε πώς φαίνεται το αρχείο at.deny:

sudo less /etc/at.deny

ο

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

Τώρα, θα επεξεργαστούμε το αρχείο at.allow. Θα προσθέσουμε τον Dave και τη Mary, αλλά δεν θα επιτρέπεται σε κανέναν άλλο να χρησιμοποιήσει το.

Αρχικά, πληκτρολογούμε τα εξής:

sudo gedit /etc/at.allow

ο

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

Εάν κάποιος άλλος προσπαθήσει να χρησιμοποιήσει το, θα του πουν ότι δεν έχει άδεια. Για παράδειγμα, ας υποθέσουμε ότι ένας χρήστης με το όνομα eric πληκτρολογεί τα εξής:

at

Θα του αρνούνταν, όπως φαίνεται παρακάτω.

Και πάλι, ο eric δεν βρίσκεται στο αρχείο at.deny. Μόλις βάλετε οποιονδήποτε στο αρχείο at.allow, σε οποιονδήποτε- και σε όλους τους άλλους δεν επιτρέπεται η χρήση του στο.

Εξαιρετικό για εφάπαξ

Όπως μπορείτε να δείτε, τόσο το at όσο και το batch είναι ιδανικά για εργασίες που χρειάζεται να εκτελέσετε μόνο μία φορά. Και πάλι, ως μια γρήγορη κριτική:

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