Supervisior – kontrola procesów na przykładzie działania kolejki w Laravelu


12 listopada 2020 / Michał Kortas


Supervisor wykorzystuję do pilnowania kolejek zadań w aplikacjach webowych, jednak może on kontrolować w zasadzie każdy proces w systemie operacyjnym. Dzisiejszy post poświęciłem w całości na instalację Supervisora na CentOS 8 oraz konfigurację do współpracy z frameworkiem Laravel.

Instalacja na CentOS 8

Najpierw aktualizujemy paczki i instalujemy Supervisor.

Po pomyślnej instalacji uruchamiamy go.

Włączamy również autostart po bootowaniu systemu.

Status Supervisora można sprawdzić za pomocą komendy:

Supervisor - status

Supervisor – status

Konfiguracja Supervisora

Domyślny plik konfiguracyjny znajduje się w /etc/supervisord.conf. Jeśli go tam nie ma, za pomocą tego polecenia skopiujemy przygotowany preset.

Budowanie pliku konfiguracyjnego

Mam zasadę tworzenia osobnych plików konfiguracyjnych dla każdego procesu i podpinania ich w pliku głównym. Tworzymy więc nowy plik konfiguracyjny, np. w katalogu domeny naszej aplikacji. Niech plik ten nazywa się w tym przypadku laravel_worker.config. Nazwa pliku nie ma znaczenia, możemy nadać własną.

Dokumentacja Laravela proponuje gotowy plik konfiguracyjny. Wykorzystajmy go więc.

Poszczególne linie powyższego kodu są dość zrozumiałe, jednak pozwolę je sobie krótko opisać.

  1. Nazwa program
  2. Nazwa procesów – zawsze zostawiam domyślną wartość. W przypadku wielu procesów (punkt 7) należy zostawić ten ciąg znaków %(process_num)
  3. Komenda do wykonywania – w tym przypadku wywołuje ona zadania zapisane w kolejce Laravela
  4. Jeśli wystąpi wartość „true” to program uruchomi się razem z Supervisorem
  5. Jeśli wystąpi wartość „true” to Supervisor zresetuje już istniejące procesy w przypadku wystąpienia w nich błędu
  6. Użytkownik
  7. Liczba instancji programu, które zostaną uruchomione
  8. Przekierowywanie wyjścia programu (patrz – punkt 9)
  9. Ścieżka do pliku, do którego zostanie przekierowane wyjście programu (punkt 8)
  10. Czas do zabicia procesu liczony w sekundach. Upewnij się, że zadanie w kolejce nie wykonuje się dłużej niż podana tutaj wartość

Podłączanie własnej konfiguracji do /etc/supervisord.conf

Edytujemy plik /etc/supervisord.conf i przechodzimy na jego koniec. Usuwamy średniki z dwóch linii:

Następnie podajemy ścieżkę do własnej, dodatkowej konfiguracji.

Uruchamianie kontroli procesów

Jeśli wszystko jest zapisane, wymuszamy ponowne odczytanie konfiguracji przez Supervisor.

Pozostaje jeszcze uruchomić nowo utworzone procesy.

Od tego momentu Supervisor nadzoruję kolejkę w aplikacji Laravel.

Znane mi błędy

Podczas pierwszej styczności z Supervisorem nie ustrzegłem się problemów. Oto kilka z nich.

ERROR (no such file)

Upewnij się, że ścieżki w pliku konfiguracyjnym w wywoływanej komendzie są poprawne. Popełniłem literówkę w części odwołującej do pliku artisan, ale warto też dodać bezwzględną ścieżkę do php – tak jak w przykładzie powyżej.

unix:///tmp/supervisor.sock no such file

W tym przypadku winna była ścieżka do pliku supervisor.sock. Upewnij się, gdzie się znajduje. Musiałem ją podmienić w głównym pliku konfiguracyjnym na /run/supervisor/supervisor.sock.

Ścieżka do pliku supervisor.sock

Ścieżka do pliku supervisor.sock


Tagi:


Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.