Penyelia adalah sistem pelanggan / pelayan yang digunakan untuk mengawal sejumlah proses UNIX, lebih khusus proses yang berkaitan dengan projek atau pelanggan. Sebagai contoh, anda boleh menggunakan penyelia untuk menelurkan dan memantau sebilangan besar barisan pekerja dari aplikasi web anda.
Komponen sistem ini adalah:
- supervisord: Bahagian pelayan sistem.
- supervisorctl: Antara muka baris perintah yang digunakan untuk berinteraksi dengan pelayan.
- Pelayan web: Pelayan web sederhana dan antara muka pengguna web dengan fungsi asas berbanding dengan supervisorctl .
- Antaramuka XML-RPC: Pelayan HTTP yang sama yang digunakan oleh pelanggan web, menyediakan antara muka XML-RPC yang dapat digunakan untuk mengendalikan program penyelia.
Dalam tutorial ini kami akan memasang versi penyelia yang paling terkini, menunjukkan cara menelurkan dan mengurus program supervisorctl
, dan mengkonfigurasi antara muka web untuk menguruskan program kami.
Pemasangan dan konfigurasi asas
Kami akan memasang penyelia melalui easy_install
, ciri-ciri python setuptools.
Pertama, kemas kini senarai pakej tempatan anda dan kemudian pasang python setuptools
.
sudo apt-get update && sudo apt-get install python-setuptools
Sekarang kita boleh memasang penyelia.
sudo easy_install supervisor
Setelah pemasangan selesai, kita harus menghasilkan fail konfigurasi kita. Buat folder bernama supervisor
di dalam /etc
.
sudo mkdir /etc/supervisor
Dan kemudian laksanakan perkara berikut.
echo_supervisord_conf > /etc/supervisor/supervisord.conf
Sekiranya anda tidak log masuk dengan root
pengguna, anda mungkin mendapat Permission denied
ralat (walaupun dengan sudo
). Ini disebabkan pengalihan semula. Untuk mengatasi ini, log masuk sebagai root.
sudo su
Kemudian anda boleh menjalankan perintah itu lagi.
echo_supervisord_conf > /etc/supervisor/supervisord.conf
Anda kini boleh meninggalkan root
pengguna dengan exit
arahan. The echo_supervisord_conf
arahan telah disediakan oleh pemasangan penyelia kami.
Konfigurasi asas
Buka /etc/supervisor/supervisord.conf
fail dan periksa kandungannya. Anda akan perhatikan bahawa fail konfigurasi ini mengikuti INI
sintaks, dan dibahagikan dengan bahagian (ditunjukkan dengan tanda kurung seperti dalam [section-name]
).
Untuk menambah program yang akan dikendalikan oleh penyelia, kita hanya perlu membuat bahagian yang sesuai [program]
. Namun, untuk mengelakkan masalah dengan fail konfigurasi utama setiap kali kita perlu menambahkan (atau mengubah) program, kita akan menggunakan [include]
bahagian tersebut. Cari bahagian ini, tanggalkan dan kemudian edit sehingga kelihatan seperti berikut.
[include]
files=conf.d/*.conf
Sekarang untuk setiap program yang ingin kita tambahkan, kita akan membuat .ini
fail di dalam /etc/supervisor/conf.d/
direktori. Mari buat folder ini.
sudo mkdir /etc/supervisor/conf.d
Memulakan pelayan penyelia
Seperti yang dinyatakan sebelum ini, penyelia terdiri daripada pelayan dan klien yang menghubungkannya. Untuk dapat mengurus dan mengawal program, kita perlu memulakan pelayan. Untuk melakukannya, kami akan mendaftarkan pelayan penyelia systemd
agar pelayan dapat dimulakan pada permulaan sistem.
Untuk melakukannya, buat fail yang dipanggil supervisord.service
dalam /etc/systemd/system
direktori.
sudo touch /etc/systemd/system/supervisord.service
Tambahkan kandungan berikut ke fail.
[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
Aktifkan perkhidmatan penyelia.
sudo systemctl start supervisord.service
Selagi fail perkhidmatan berada di dalam /etc/systemd/system
direktori, ia akan dimulakan secara automatik pada permulaan sistem.
Anda boleh menyemak status perkhidmatan.
systemctl status supervisord.service
Anda juga boleh melihat lognya.
sudo journalctl -u supervisord.service
Menambah program
Program yang dikendalikan oleh penyelia diberikan oleh [program]
bahagian yang berbeza dalam konfigurasi. Untuk setiap program yang ingin kami kelola, kami akan membuat file konfigurasi yang berdiri sendiri yang memaklumkan jalan yang dapat dijalankan perintah, apa-apa pemboleh ubah persekitaran, bagaimana melakukan sekiranya terjadi penutupan.
Pertama, mari buat skrip mudah yang mencatatkan cap waktu. Buat fail yang dipanggil hello_supervisor.sh
(di mana sahaja anda mahu, kami akan merujuk jalan lengkap skrip ini).
touch hello_supervisor.sh
Sekarang, masukkan isi berikut ke dalamnya
#!/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
Sekarang jadikan ia boleh dilaksanakan
chmod +x hello_supervisor.sh
Secara praktiknya skrip ini tidak berguna lagi. Namun, kita dapat menggunakannya untuk menunjukkan kekuatan penyelia. Buat fail konfigurasi yang sesuai dengan menjalankan perkara berikut.
sudo touch /etc/supervisor/conf.d/hello_supervisor.conf
Sekarang masukkan kandungan berikut ke dalam fail ini.
[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
Catatan: Pastikan anda mengganti USER
dengan nama pengguna anda.
Kami akan mengkaji konfigurasi ini langkah demi langkah.
[program:hello_supervisor]
command=/home/USER/hello_supervisor.sh
Pertama, konfigurasi dimulakan dengan menentukan program nama hello_supervisor . Ia juga memberi tahu jalan penuh yang dapat dijalankan untuk dijalankan.
autostart=true
Garis ini menyatakan bahawa program ini harus dimulakan secara automatik semasa penyelia dimulakan.
autorestart=true
Sekiranya program berhenti, atas sebab apa pun, baris ini memberitahu penyelia untuk memulakan semula proses secara automatik.
stderr_logfile=/var/log/hello_supervisor.err.log
stdout_logfile=/var/log/hello_supervisor.out.log
Garis-garis ini menentukan lokasi log untuk stderr
dan stdout
masing-masing.
Menguruskan program
Setelah kita memasang dan mengkonfigurasi penyelia, kita dapat menguruskan proses kita.
Setelah menambahkan program baru, kita harus menjalankan dua perintah berikut, untuk memberi tahu pelayan untuk membaca kembali file konfigurasi dan untuk menerapkan perubahan.
sudo supervisorctl reread
sudo supervisorctl update
Sekarang jalankan supervisorctl
klien.
sudo supervisorctl
Anda akan disambut dengan senarai proses yang didaftarkan. Anda akan melihat proses yang dipanggil hello_supervisor
dengan RUNNING
status.
hello_supervisor RUNNING pid 6853, uptime 0:22:30
supervisor>
Taipkan help
senarai arahan yang tersedia.
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
Singkatnya, kita dapat start
, stop
dan restart
program dengan menyampaikan nama program sebagai argumen kepada perintah masing-masing.
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>
Kita juga dapat melihat output program dengan tail
perintah.
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
Untuk stderr
outputnya, anda juga boleh menggunakan 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!
Dengan menggunakan status
perintah, anda dapat melihat status semua program yang didaftarkan.
Setelah selesai, anda boleh berhenti.
supervisor> quit
Pelanggan pelayan laman web
Untuk membenarkan akses ke pelayan web penyelia, buka fail konfigurasi penyelia dan cari [inet_http_server]
bahagian tersebut.
nano /etc/supervisor/supervisord.conf
Sekarang kemas kini konfigurasi bahagian ini dengan yang berikut.
[inet_http_server]
port=*:9001
username=your_username
password=your_password
Ganti your_username
dan your_password
dengan kelayakan yang anda inginkan, simpan pengubahsuaian anda dan mulakan semula perkhidmatan penyelia.
sudo systemctl restart supervisord.service
Ingatlah untuk membenarkan TCP
akses ke port 9001
di firewall anda dan kemudian akses http://{server-ip}:9001
dari penyemak imbas anda. Apabila ditanya, berikan username
dan password
. Anda kini dapat mengawal proses anda dari web.
Kesimpulannya
Kami telah memasang versi supervisord yang paling terkini, belajar bagaimana mengkonfigurasinya untuk memulakan sistem secara automatik dengan systemd dan juga mengkaji penggunaan asas supervisorctl
. Untuk kes konfigurasi dan penggunaan yang lebih maju, anda boleh merujuk kepada dokumentasi penyelia rasmi .