Mateusz Mazurek – programista z pasją

Python, architektura, ciekawostki ze świata IT

Inżynieria oprogramowania Linux Programowanie Programowanie webowe Utrzymanie oprogramowania

Zarządzanie procesami – supervisord

Cześć! Cieszę się, że mnie odwiedziłeś/aś. Zanim przejdziesz do artykułu chciałbym zwrocić Ci uwagę na to, że ten artykuł był pisany kilka lat temu (2016-03-11) miej więc proszę na uwadzę że rozwiązania i przemyślenia które tu znajdziesz nie muszą być aktualne. Niemniej jednak zachęcam do przeczytania.

Cześć!

A więc kontynuujemy mój poprzedni wpis. Zatrzymaliśmy się na sytuacji gdzie mamy zainstalowaną naszą aplikację na virtualenvie.

Tak jak pisałem wcześniej – zarządzanie procesami jest bardzo istotnym elementem każdego kto chce pisać własne programy które mają działać non stop (a przynajmniej prawie non stop). Trzeba zorganizować sobie środowisko które będzie pozwalać na łatwe zatrzamynie i uruchamianie aplikacji jak i jej automatyczne restartowanie czy podnoszenie po „awarii”.

Takim środowiskiem jest supervisord.

Instalacja jest łatwa, wystarczy wykonać:

1
pip install supervisor

Warto mieć na uwadze:

1
Supervisor requires Python 2.4 or later but does not work on any version of Python 3.

i jeszcze to:

1
DEPRECATION: Python 2.6 is no longer supported by the Python core team, please upgrade your Python. A future version of pip will drop support for Python 2.6

No i jak już go zainstalowaliśmy to stwórzmy przykładowy plik konfiguracyjny:

1
echo_supervisord_conf > /etc/supervisord.conf

W samym pliku /etc/supervisord.conf jest wszystko opisane więc nie będę powielał wiedzy a sam dodam do tego pliku taki kawałek:

1
2
3
4
5
[program:python_finacial]
command=/opt/run_python_financial
user=root
stdout_logfile=/var/log/stdout_financial.log
stderr_logfile=/var/log/stderr_financial.log

Który mówi żeby uruchamiać plik /opt/run_python_financial z roota. Standardowe wyjście aplikacji przekierowywać do /var/log/stdout_financial.log a wyjście błędów do /var/log/stderr_financial.log.
Nasza aplikacja ma zaimplementowane logowanie bezpośrednio do pliku a nie na standardowe wyjście, więc supervisor zbyt dużo nie przekieruje ale takie linijki zawsze warto mieć.

Plik /opt/run_python_financial ma zawartość:

1
2
3
#!/bin/sh
source /opt/virtual_envs/bin/activate
exec gold_digger

No i skoro to już mamy to możemy go uruchomić, wpisując:

1
supervisord

Aby zarządzać procesami możesz uruchomić program supervisorctl i będzie tam lista aktywnych procesów. Taka konsola jest przydatna i potrzebna ale poza nią możemy mieć jeszcze dostęp przez przeglądarkę. Aby taką możliwość uruchomić należy w pliku konfiguracyjnym- /etc/supervisord.conf – w sekcji inet_http_server odkomentować wszystkie 3 ustawienia oraz ustawić hasło i login.
Poza tą zmianą należy dokonać jeszcze jednej – tym razem w sekcji supervisorctl należy odkomentować wszystko. Login i hasło powinny być takie same jak wyżej ustawione zostały.

Restart supervisor’a wskazany – możesz przez program service. Ewentualnie ubij w htopie i uruchom ponownie.

Następnie przez przeglądarkę wejdź pod adres
http://adres_gdzie_lezy_supervisor:9001/

a Twoim oczom ukaże się coś podobnego do:
supervisor_gui

No i to mógłby by być koniec wpisu ale dodam jeszcze jedno – kursy zatrzymują się na weekend – tzn kurs srebra, złota, palladu i platyny w weekend się nie zmieniają :P

A więc nie ma sensu żeby program wtedy pracował.

Dodamy więc do CRON’a zadanie – niech on mi gasi aplikację powiedzmy o 00:01 w sobotę i podnosi o tej samej godzinie w poniedziałek:

1
2
1 0 * * 1 /usr/bin/supervisorctl start python_finacial
1 0 * * 6 /usr/bin/supervisorctl stop python_finacial

A więc teraz mogę z czystym sumieniem zakończyć część drugą z trzech.

W następnej części zrobimy coś z danymi które zbieramy – wyrysujemy w przeglądarce ładne wykresy ;)

Następna część już jest dostępna – KLIK.

Dzięki za wizytę,
Mateusz Mazurek

A może wolisz nowości na mail?

Subskrybuj
Powiadom o
guest

Witryna wykorzystuje Akismet, aby ograniczyć spam. Dowiedz się więcej jak przetwarzane są dane komentarzy.

4 komentarzy
Inline Feedbacks
View all comments