Εγκατάσταση και βασική διαμόρφωση
Εκκίνηση του διακομιστή επόπτη
Προσθήκη προγραμμάτων
Διαχείριση προγραμμάτων
Ο πελάτης διακομιστή ιστού
συμπέρασμα
Ο επόπτης είναι ένα σύστημα πελάτη/διακομιστή που χρησιμοποιείται για τον έλεγχο ενός αριθμού διεργασιών UNIX, πιο συγκεκριμένα διεργασιών που σχετίζονται με ένα έργο ή έναν πελάτη. Για παράδειγμα, θα μπορούσατε να χρησιμοποιήσετε τον επόπτη για να δημιουργήσετε και να παρακολουθήσετε έναν αυθαίρετο αριθμό ουρών εργαζομένων της εφαρμογής Ιστού σας.
Τα στοιχεία αυτού του συστήματος είναι:
- επόπτης: Το τμήμα διακομιστή του συστήματος.
- supervisorctl: Η διεπαφή γραμμής εντολών που χρησιμοποιείται για την αλληλεπίδραση με τον διακομιστή.
- Διακομιστής Ιστού: Ένας απλός διακομιστής ιστού και μια διεπαφή χρήστη ιστού με βασική λειτουργικότητα σε σύγκριση με το supervisorctl .
- Διεπαφή XML-RPC: Ο ίδιος διακομιστής HTTP που χρησιμοποιείται από το πρόγραμμα-πελάτη Ιστού, εξυπηρετεί μια διεπαφή XML-RPC που μπορεί να χρησιμοποιηθεί για τον έλεγχο των προγραμμάτων επόπτη.
Σε αυτό το σεμινάριο θα εγκαταστήσουμε την πιο ενημερωμένη έκδοση του επόπτη, θα δείξουμε τον τρόπο δημιουργίας και διαχείρισης προγραμμάτων μέσω supervisorctlτου και θα διαμορφώσουμε μια διεπαφή ιστού για τη διαχείριση των προγραμμάτων μας.
Εγκατάσταση και βασική διαμόρφωση
Θα εγκαταστήσουμε τον επόπτη μέσω του easy_install, ένα χαρακτηριστικό των setuptools της python.
Πρώτα, ενημερώστε τη λίστα τοπικών πακέτων και, στη συνέχεια, εγκαταστήστε το python setuptools.
sudo apt-get update && sudo apt-get install python-setuptools
Τώρα μπορούμε να εγκαταστήσουμε επόπτη.
sudo easy_install supervisor
Μόλις ολοκληρωθεί η εγκατάσταση, πρέπει να δημιουργήσουμε το αρχείο ρυθμίσεών μας. Δημιουργήστε ένα φάκελο με το όνομα supervisorμέσα /etc.
sudo mkdir /etc/supervisor
Και μετά εκτελέστε το εξής.
echo_supervisord_conf > /etc/supervisor/supervisord.conf
Εάν δεν είστε συνδεδεμένοι με τον rootχρήστη, μπορεί να εμφανιστεί ένα Permission deniedσφάλμα (ακόμα και με sudo). Αυτό οφείλεται στην ανακατεύθυνση. Για να το ξεπεράσετε, συνδεθείτε ως root.
sudo su
Στη συνέχεια, μπορείτε να εκτελέσετε ξανά την εντολή.
echo_supervisord_conf > /etc/supervisor/supervisord.conf
Τώρα μπορείτε να αφήσετε τον rootχρήστη με την exitεντολή. Η echo_supervisord_confεντολή δόθηκε από την επόπτη εγκατάσταση μας.
Βασική διαμόρφωση
Ανοίξτε το /etc/supervisor/supervisord.confαρχείο και ελέγξτε το περιεχόμενό του. Θα σημειώσετε ότι αυτό το αρχείο ρυθμίσεων ακολουθεί τη INIσύνταξη και χωρίζεται σε ενότητες (παριστάνεται με αγκύλες όπως στο [section-name]).
Για να προσθέσουμε προγράμματα προς διαχείριση από τον επόπτη, χρειάζεται απλώς να δημιουργήσουμε τις κατάλληλες [program]ενότητες. Ωστόσο, για να μην μπλέκουμε με το κύριο αρχείο διαμόρφωσης κάθε φορά που χρειάζεται να προσθέσουμε (ή να αλλάξουμε) ένα πρόγραμμα, θα χρησιμοποιούμε την [include]ενότητα. Βρείτε αυτήν την ενότητα, καταργήστε το σχόλιο και, στη συνέχεια, επεξεργαστείτε την ώστε να μοιάζει με το παρακάτω.
[include]
files=conf.d/*.conf
Τώρα για κάθε πρόγραμμα που θέλουμε να προσθέσουμε, θα δημιουργούμε ένα .iniαρχείο μέσα στον /etc/supervisor/conf.d/κατάλογο. Ας δημιουργήσουμε αυτόν τον φάκελο.
sudo mkdir /etc/supervisor/conf.d
Εκκίνηση του διακομιστή επόπτη
Όπως σημειώθηκε προηγουμένως, ο επόπτης αποτελείται από έναν διακομιστή και πελάτες που συνδέονται σε αυτόν. Για να μπορούμε να διαχειριζόμαστε και να ελέγχουμε προγράμματα, πρέπει να ξεκινήσουμε τον διακομιστή. Για να γίνει αυτό, θα καταχωρήσουμε τον επόπτη διακομιστή στο systemd, έτσι ώστε ο διακομιστής να μπορεί να ξεκινήσει κατά την εκκίνηση του συστήματος.
Για να το κάνετε αυτό, δημιουργήστε ένα αρχείο που ονομάζεται supervisord.serviceστον /etc/systemd/systemκατάλογο.
sudo touch /etc/systemd/system/supervisord.service
Προσθέστε τα ακόλουθα περιεχόμενα στο αρχείο.
[Unit]
Description=Supervisor daemon
Documentation=http://supervisord.org
After=network.target
[Service]
ExecStart=/usr/local/bin/supervisord -n -c /etc/supervisor/supervisord.conf
ExecStop=/usr/local/bin/supervisorctl $OPTIONS shutdown
ExecReload=/usr/local/bin/supervisorctl $OPTIONS reload
KillMode=process
Restart=on-failure
RestartSec=42s
[Install]
WantedBy=multi-user.target
Alias=supervisord.service
Ενεργοποιήστε την υπηρεσία εποπτείας.
sudo systemctl start supervisord.service
Εφόσον το αρχείο υπηρεσίας βρίσκεται στον /etc/systemd/systemκατάλογο, θα ξεκινήσει αυτόματα κατά την εκκίνηση του συστήματος.
Μπορείτε να ελέγξετε την κατάσταση της υπηρεσίας.
systemctl status supervisord.service
Επίσης, μπορείτε να ελέγξετε τα αρχεία καταγραφής.
sudo journalctl -u supervisord.service
Προσθήκη προγραμμάτων
Τα προγράμματα που ελέγχονται από τον επόπτη δίνονται από διαφορετικές [program]ενότητες στη διαμόρφωση. Για κάθε πρόγραμμα που θέλουμε να διαχειριστούμε, θα δημιουργήσουμε ένα αυτόνομο αρχείο διαμόρφωσης που θα ενημερώνει την εκτελέσιμη διαδρομή της εντολής, τυχόν περιβαλλοντικές μεταβλητές, τον τρόπο εκτέλεσης σε περίπτωση τερματισμού λειτουργίας.
Αρχικά, ας δημιουργήσουμε ένα απλό σενάριο που καταγράφει μια χρονική σήμανση. Δημιουργήστε ένα αρχείο με το όνομα hello_supervisor.sh(όπου θέλετε, θα αναφέρουμε την πλήρη διαδρομή αυτού του σεναρίου).
touch hello_supervisor.sh
Τώρα, βάλτε τα ακόλουθα περιεχόμενα σε αυτό
#!/bin/bash
while true
do
# Echo current timestamp to stdout
echo Hello Supervisor: `date`
# Echo 'error!' to stderr
echo An error ocurred at `date`! >&2
sleep 1
done
Τώρα κάντε το εκτελέσιμο
chmod +x hello_supervisor.sh
Πρακτικά αυτό το σενάριο είναι λίγο πολύ άχρηστο. Ωστόσο, μπορούμε να το χρησιμοποιήσουμε για να δείξουμε τη δύναμη του επόπτη. Δημιουργήστε το αντίστοιχο αρχείο ρυθμίσεων εκτελώντας τα παρακάτω.
sudo touch /etc/supervisor/conf.d/hello_supervisor.conf
Τώρα βάλτε τα ακόλουθα περιεχόμενα σε αυτό το αρχείο.
[program:hello_supervisor]
command=/home/USER/hello_supervisor.sh
autostart=true
autorestart=true
stderr_logfile=/var/log/hello_supervisor.err.log
stdout_logfile=/var/log/hello_supervisor.out.log
Σημείωση: Φροντίστε να το αντικαταστήσετε USERμε το όνομα χρήστη σας.
Θα εξετάσουμε αυτή τη διαμόρφωση βήμα προς βήμα.
[program:hello_supervisor]
command=/home/USER/hello_supervisor.sh
Αρχικά, η διαμόρφωση ξεκινά ορίζοντας ένα πρόγραμμα με το όνομα hello_supervisor . Ενημερώνει επίσης την πλήρη διαδρομή του εκτελέσιμου που θα εκτελεστεί.
autostart=true
Αυτή η γραμμή δηλώνει ότι αυτό το πρόγραμμα θα πρέπει να ξεκινά αυτόματα κατά την εκκίνηση του επόπτη.
autorestart=true
Εάν το πρόγραμμα τερματιστεί, για οποιονδήποτε λόγο, αυτή η γραμμή ενημερώνει τον επόπτη να επανεκκινήσει αυτόματα τη διαδικασία.
stderr_logfile=/var/log/hello_supervisor.err.log
stdout_logfile=/var/log/hello_supervisor.out.log
Αυτές οι γραμμές ορίζουν τη θέση του αρχείου καταγραφής για stderrκαι stdout, αντίστοιχα.
Διαχείριση προγραμμάτων
Τώρα που έχουμε εγκαταστήσει και ρυθμίσει τον επόπτη, είμαστε σε θέση να διαχειριζόμαστε τις διαδικασίες μας.
Αφού προσθέσουμε ένα νέο πρόγραμμα, θα πρέπει να εκτελέσουμε τις ακόλουθες δύο εντολές, για να ενημερώσουμε τον διακομιστή να διαβάσει ξανά τα αρχεία διαμόρφωσης και να εφαρμόσει τυχόν αλλαγές.
sudo supervisorctl reread
sudo supervisorctl update
Τώρα εκτελέστε τον supervisorctlπελάτη.
sudo supervisorctl
Θα σας υποδεχθεί μια λίστα με τις καταχωρημένες διαδικασίες. Θα δείτε μια διαδικασία που καλείται hello_supervisorμε RUNNINGκατάσταση.
hello_supervisor RUNNING pid 6853, uptime 0:22:30
supervisor>
Πληκτρολογήστε helpμια λίστα με διαθέσιμες εντολές.
supervisor> help
default commands (type help <topic>):
=====================================
add exit open reload restart start tail
avail fg pid remove shutdown status update
clear maintail quit reread signal stop version
Με λίγα λόγια, μπορούμε start, stopκαι restartπρογραμματίζουμε περνώντας το όνομα του προγράμματος ως όρισμα στην αντίστοιχη εντολή.
supervisor> stop hello_supervisor
hello_supervisor: stopped
supervisor> start hello_supervisor
hello_supervisor: started
supervisor> restart hello_supervisor
hello_supervisor: stopped
hello_supervisor: started
supervisor>
Μπορούμε επίσης να ρίξουμε μια ματιά στην έξοδο του προγράμματος με την tailεντολή.
supervisor> tail hello_supervisor
Hello Supervisor: Mon Sep 25 19:27:29 UTC 2017
Hello Supervisor: Mon Sep 25 19:27:30 UTC 2017
Hello Supervisor: Mon Sep 25 19:27:31 UTC 2017
Για την stderrέξοδο, μπορείτε επίσης να χρησιμοποιήσετε tail.
supervisor> tail hello_supervisor stderr
An error ocurred at Mon Sep 25 19:31:12 UTC 2017!
An error ocurred at Mon Sep 25 19:31:13 UTC 2017!
An error ocurred at Mon Sep 25 19:31:14 UTC 2017!
Με την επίκληση της statusεντολής, μπορείτε να δείτε την κατάσταση όλων των εγγεγραμμένων προγραμμάτων.
Μόλις τελειώσετε, μπορείτε να τα παρατήσετε.
supervisor> quit
Ο πελάτης διακομιστή ιστού
Για να επιτρέψετε την πρόσβαση στον διακομιστή web επόπτη, ανοίξτε το αρχείο διαμόρφωσης επόπτη και εντοπίστε την [inet_http_server]ενότητα.
nano /etc/supervisor/supervisord.conf
Τώρα ενημερώστε τη διαμόρφωση αυτής της ενότητας με τα ακόλουθα.
[inet_http_server]
port=*:9001
username=your_username
password=your_password
Αντικαταστήστε your_usernameκαι your_passwordμε τα επιθυμητά διαπιστευτήρια, αποθηκεύστε τις τροποποιήσεις σας και την επανεκκίνηση της υπηρεσίας επόπτη.
sudo systemctl restart supervisord.service
Θυμηθείτε να επιτρέψετε την TCPπρόσβαση στη θύρα 9001του τείχους προστασίας σας και, στη συνέχεια, την πρόσβαση http://{server-ip}:9001από το πρόγραμμα περιήγησής σας. Όταν σας ζητηθεί, δώστε σας usernameκαι password. Μπορείτε πλέον να ελέγχετε τις διαδικασίες σας από τον ιστό.
συμπέρασμα
Εγκαταστήσαμε την πιο ενημερωμένη έκδοση του επόπτη, μάθαμε πώς να το ρυθμίσουμε για αυτόματη εκκίνηση του συστήματος με το systemd και εξετάσαμε επίσης μια βασική χρήση του supervisorctl. Για πιο προηγμένες περιπτώσεις διαμόρφωσης και χρήσης, μπορείτε να ανατρέξετε στην επίσημη τεκμηρίωση του επόπτη .