Πώς να εκτελέσετε ή να επαναλάβετε μια εντολή Linux κάθε X δευτερόλεπτα για πάντα


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

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

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

1. Χρησιμοποιήστε την εντολή ρολογιού

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

Παρακολούθηση χρήσης μνήμης

Το "Watch" είναι εξαιρετικά εύκολο στη χρήση, για να το δοκιμάσετε, μπορείτε να ενεργοποιήσετε αμέσως ένα τερματικό Linux και να πληκτρολογήσετε την ακόλουθη εντολή:

watch free -m

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

Όπως φαίνεται στην παραπάνω έξοδο, έχετε μια κεφαλίδα, που εμφανίζει πληροφορίες σχετικά με το διάστημα ενημέρωσης (από αριστερά προς τα δεξιά), την εντολή που εκτελείται και την τρέχουσα ώρα. Εάν θέλετε να αποκρύψετε αυτήν την κεφαλίδα, μπορείτε να χρησιμοποιήσετε την επιλογή -t.

Η επόμενη λογική ερώτηση είναι – πώς να αλλάξετε το διάστημα εκτέλεσης. Για αυτόν τον σκοπό, μπορείτε να χρησιμοποιήσετε την επιλογή -n, η οποία καθορίζει το διάστημα με το οποίο θα εκτελεστεί η εντολή. Αυτό το διάστημα καθορίζεται σε δευτερόλεπτα. Ας υποθέσουμε λοιπόν ότι θέλετε να εκτελείτε το αρχείο script.sh κάθε 10 δευτερόλεπτα, μπορείτε να το κάνετε ως εξής:

watch -n 10 script.sh

Σημειώστε ότι αν εκτελέσετε την εντολή όπως φαίνεται παραπάνω, θα πρέπει να cd στον κατάλογο (μάθετε Μάθετε 15 παραδείγματα εντολών cd) όπου το σενάριο βρίσκεται ή προσδιορίστε με άλλο τρόπο την πλήρη διαδρομή προς αυτό το σενάριο.

Άλλες χρήσιμες επιλογές της εντολής watch είναι:

  1. -b – δημιουργεί έναν ήχο μπιπ εάν η έξοδος της εντολής δεν είναι μηδενική.
  2. -c – Ερμηνεύει τις ακολουθίες χρωμάτων ANSI.
  3. -d – επισημαίνει τις αλλαγές στην έξοδο εντολών.

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

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

watch uptime

Για έξοδο από την εντολή, πατήστε CTRL+C.

Εδώ, η εντολή 'uptime' θα εκτελείται και θα εμφανίζει τα ενημερωμένα αποτελέσματα κάθε 2 δευτερόλεπτα από προεπιλογή.

Παρακολούθηση της προόδου της εντολής αντιγραφής

Στο Linux, ενώ αντιγράφετε αρχεία από μια τοποθεσία σε άλλη χρησιμοποιώντας την εντολή cp, η πρόοδος των δεδομένων δεν εμφανίζεται, για να δείτε την πρόοδο των δεδομένων που αντιγράφονται, μπορείτε να χρησιμοποιήσετε το ρολόι εντολή μαζί με την εντολή du -s για έλεγχο της χρήσης του δίσκου σε πραγματικό χρόνο.

cp ubuntu-15.10-desktop-amd64.iso /home/tecmint/ &
watch -n 0.1 du -s /home/tecmint/ubuntu-15.10-desktop-amd64.iso 

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

2. Χρησιμοποιήστε την εντολή ύπνου

Το Sleep χρησιμοποιείται συχνά για τον εντοπισμό σφαλμάτων σε σενάρια φλοιού, αλλά έχει και πολλούς άλλους χρήσιμους σκοπούς. Για παράδειγμα, όταν συνδυάζεται με βρόχους for ή while, μπορείτε να λάβετε πολύ εκπληκτικά αποτελέσματα.

Εάν είστε νέοι στο bash scripting, μπορείτε να δείτε τον οδηγό μας σχετικά με τους βρόχους bash εδώ.

Σε περίπτωση που αυτή είναι η πρώτη φορά που ακούτε για την εντολή "sleep", χρησιμοποιείται για να καθυστερήσει κάτι για ένα συγκεκριμένο χρονικό διάστημα. Στα σενάρια, μπορείτε να το χρησιμοποιήσετε για να πείτε στο σενάριο σας να εκτελέσει την εντολή 1, να περιμένετε 10 δευτερόλεπτα και μετά να εκτελέσετε την εντολή 2.

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

Παρακάτω μπορείτε να δείτε παραδείγματα και των δύο βρόχων:

Παράδειγμα για βρόχο

for i in {1..10}; do echo -n "This is a test in loop $i "; date ; sleep 5; done

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

Ακολουθεί ένα δείγμα εξόδου:

This is a test in loop 1 Wed Feb 17 20:49:47 EET 2016
This is a test in loop 2 Wed Feb 17 20:49:52 EET 2016
This is a test in loop 3 Wed Feb 17 20:49:57 EET 2016
This is a test in loop 4 Wed Feb 17 20:50:02 EET 2016
This is a test in loop 5 Wed Feb 17 20:50:07 EET 2016
This is a test in loop 6 Wed Feb 17 20:50:12 EET 2016
This is a test in loop 7 Wed Feb 17 20:50:17 EET 2016
This is a test in loop 8 Wed Feb 17 20:50:22 EET 2016
This is a test in loop 9 Wed Feb 17 20:50:27 EET 2016
This is a test in loop 10 Wed Feb 17 20:50:32 EET 2016

Μπορείτε να αλλάξετε τις εντολές echo και date με τις δικές σας εντολές ή σενάριο και να αλλάξετε το διάστημα ύπνου ανάλογα με τις ανάγκες σας.

Παράδειγμα βρόχου while

while true; do echo -n "This is a test of while loop";date ; sleep 5; done

Ακολουθεί δείγμα εξόδου:

This is a test of while loopWed Feb 17 20:52:32 EET 2016
This is a test of while loopWed Feb 17 20:52:37 EET 2016
This is a test of while loopWed Feb 17 20:52:42 EET 2016
This is a test of while loopWed Feb 17 20:52:47 EET 2016
This is a test of while loopWed Feb 17 20:52:52 EET 2016
This is a test of while loopWed Feb 17 20:52:57 EET 2016

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

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

συμπέρασμα

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

  1. Χρησιμοποιήστε το cron όταν χρειάζεται να εκτελείτε εντολές περιοδικά ακόμα και μετά την επανεκκίνηση του συστήματος.
  2. Χρησιμοποιήστε τις μεθόδους που εξηγούνται σε αυτό το σεμινάριο για προγράμματα/σενάρια που προορίζονται να εκτελεστούν στην τρέχουσα περίοδο λειτουργίας χρήστη.

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