Metody płatności Abuse

Jak skonfigurować SuperVisor

18.04.2022, 23:02

Do zarządzania procesorami w systemie Linux służą systemy inicjalizacji, takie jak systemd. Jeśli potrzebujesz prostszego rozwiązania, program, który może zarządzać procesami aplikacji, albo w systemie, albo w kontenerze Docker. Taki program istnieje - jest nim supervisor. Jest to funkcjonalnie prosty menedżer procesów open-source napisany w Pythonie, który może być używany do uruchamiania dowolnej liczby kopii procesu i monitorowania ich stanu. Poniżej pokażemy jak zainstalować i skonfigurować Supervisor na przykładzie Ubuntu 20.04.

Instalacja programu Supervisor

Najprostszym sposobem na uzyskanie programu jest zainstalowanie go z oficjalnych repozytoriów. Aby to zrobić, należy uruchomić polecenie:

$ sudo apt install supervisor

Jak skonfigurować SuperVisor

Jeśli chcesz, aby program działał cały czas, musisz dodać go do autoloadera i uruchomić. Wykonaj:

$ sudo systemctl enable supervisor --now

Jak skonfigurować SuperVisor

Następnie można wyświetlić status za pomocą polecenia:

$ sudo systemctl status supervisor

Jak skonfigurować SuperVisor

Proces konfiguracji

Plik konfiguracyjny znajduje się pod adresem /etc/supervisor/supervisord.conf. Jest to również miejsce, w którym znajdują się podstawowe ustawienia. Do konfiguracji uruchomionych procesów lepiej jest użyć katalogu /etc/supervisor/conf.d/. Główny plik konfiguracyjny można pozostawić domyślnie. Zobaczmy, jak tworzyć pliki konfiguracyjne dla programów. Składnia sekcji dla pojedynczego procesu wygląda następująco:

nazwa zmiennej wartość

Dla każdego procesu konieczne jest przekazanie takich zmiennych, aby automatycznie uruchamiał się i odzyskiwał po awarii:

  • directory - katalog roboczy;
  • command - polecenie uruchomienia procesu;
  • user- użytkownik, w imieniu którego proces zostanie uruchomiony;
  • autostart - czy proces ma być uruchamiany automatycznie;
  • autorestart- czy proces powinien zostać uruchomiony ponownie;

Dostępnych jest jednak znacznie więcej ustawień, oto niektóre z nich, które zostaną omówione w tym artykule:

  • priority - priorytet procesu, który ma zostać uruchomiony;
  • environment - zmienne środowiskowe przekazywane do procesu;
  • stdout_logfile - gdzie przekierować wyjście stdout procesu;
  • stderr_logfile - gdzie przekierować wyjście stderr procesu;
  • process_name- nazwa procesu, z możliwością podstawienia numeru kopii;
  • numprocs - liczba kopii procesu do uruchomienia;
  • startretries - liczba prób uruchomienia programu;
  • redirect_stderr - przekierowanie wyjścia błędu procesu na wyjście nadzorcy;
  • redirect_stdout - przekierowanie wyjścia procesu na wyjście nadzorcy.

Dla lepszego zrozumienia i przykładu, wykonajmy skrypt PHP, który po prostu zawiesi się w tle:

$ sudo vi /home/sergiy/program/process.php

<?php
echo "Started...";
while(true){
  sleep(5);
}

Dla procesu można utworzyć osobny plik konfiguracyjny nadzorcy. Możesz wstawić konfigurację na samym końcu głównego pliku konfiguracyjnego, ale lepiej tego nie robić. Lepiej jest utworzyć oddzielny plik konfiguracyjny dla każdego programu w /etc/supervisor/conf.d/ z nazwą *.conf. Na przykład dla tego programu plik ten będzie wyglądał następująco:

$ sudo vi /etc/supervisor/conf.d/process.conf

[program:process]


directory=/home/sergiy/program/


command=/usr/bin/php process.php


user=sergiy


autostart=true


autorestart=true

Następnie należy zrestartować supervisor, można to zrobić za pomocą systemctl:

$ sudo systemctl restart supervisor

lub za pomocą narzędzia supervisorctl:

$ sudo supervisorctl reload

Jak skonfigurować SuperVisor

Można również zobaczyć status skonfigurowanych procesów za pomocą polecenia:

Jak skonfigurować SuperVisor

Jeśli proces ma status RUNNING, to wszystko jest w porządku i został pomyślnie uruchomiony. Ale w tym przypadku proces jest uruchomiony w pojedynczej instancji, a dość często trzeba uruchomić wiele kopii tego samego procesu. W tym celu możemy użyć parametrów process_name i numprocs. Pierwszy z nich pozwala zmodyfikować nazwę procesu tak, aby zawierała numer kopii, a drugi pozwala określić, ile kopii powinno zostać uruchomionych.

Zmienna process_name zwykle zawiera wzorzec formatowania ciągów znaków Pythona, który zawiera nazwę programu i numer procesu: %(nazwa_programu)s_%(numer_procesu)02d. Tutaj nazwa zmiennej znajduje się w nawiasach, a po niej jej typ. Na przykład, aby uruchomić ten sam program w czterech wątkach, plik konfiguracyjny powinien mieć taką postać:

$ sudo vi /etc/supervisor/conf.d/process.conf

[program:process]


directory=/home/sergiy/program/


command=/usr/bin/php process.php


user=sergiy


autostart=true


autorestart=true


process_name=%(program_name)s_%(process_num)02d


numprocs=4

Teraz musimy ponownie załadować supervisorctl i będą uruchomione 4 procesy:

$ sudo supervisorctl status

Jak skonfigurować SuperVisor

Jednocześnie możliwe jest zapisywanie wszystkich danych wyjściowych programu do pliku dziennika. Do tego celu służą parametry stdout_logfile i stderr_logfile. Na przykład, można wyprowadzić plik dziennika jego wykonania bezpośrednio w folderze z programem.

$ sudo vi /etc/supervisor/conf.d/process.conf

[program:process]


directory=/home/sergiy/program/


command=/usr/bin/php process.php


user=sergiy


autostart=true


autorestart=true


process_name=%(program_name)s_%(process_num)02d


numprocs=4


stdout_logfile=/home/sergiy/program/process.log


stderr_logfile=/home/sergiy/program/process.log.error

Po ponownym uruchomieniu usługi dzienniki pojawią się w folderze z programem:

Jak skonfigurować SuperVisor

Podobnie, jeśli chcesz przekierować wyjście swoich procesów na standardowe wyjście nadzorcy, powinieneś użyć parametrów redirect_stderr i redirect_stdout. Jeśli program wymaga zmiennych środowiskowych, można je przekazać za pomocą parametru environment. Zmienne powinny być zapisywane z przecinkami. Na przykład:

$ environment=DISPLAY=":1",HOME="/root"

Po każdej zmianie konfiguracji należy pamiętać o ponownym uruchomieniu programu supervisor w celu zastosowania zmian. Narzędzie supervisorctl może być używane do kontrolowania procesów. Jak już zauważyłeś, aby zobaczyć listę procesów, musisz je wykonać:

$ sudo supervisorctl status

Następnie, znając nazwę procesu, można go ponownie uruchomić, na przykład process:process_00:

$ sudo supervisorctl restart process:process_00

Jak skonfigurować SuperVisor

Stop:

$ sudo supervisorctl stop process:process_00

Lub uruchomić:

$ sudo supervisorctl start process:process_00

Alternatywnie można połączyć się z procesem i zobaczyć, co wypisuje do stdout/stderr za pomocą polecenia fg:

$ sudo supervisorctl fg process:process_00

Przyjrzeliśmy się, jak skonfigurowany jest supervisor i jak korzystać z oprogramowania do zarządzania procesami.