Sprytne Okazje — promocje, kody rabatowe i wyprzedaże

Generator konfiguracji Supervisor

Plik .conf dla queue workera, Horizona, schedulera, Node lub WebSockets z podglądem na żywo i ostrzeżeniami o błędach.

Bezpieczne (SSL)
Przetwarzanie Lokalne
100% Darmowe
Instrukcja
  • 1
    Wprowadź dane
    Wpisz treść, wklej tekst lub załaduj plik z dysku.
  • 2
    Kliknij przycisk
    Narzędzie natychmiast przetworzy Twoje dane w przeglądarce.
  • 3
    Pobierz wynik
    Skopiuj gotowy tekst lub zapisz plik na urządzeniu.
function runTool() {
  return "Wynik gotowy w 0.1s";
}
Logi, środowisko i restarty

Procesy

4

Linii w pliku

14

Plik

worker.conf

Nazwy procesów

worker_00 … worker_03

Restart po awarii

unexpected

Restart tylko po nieoczekiwanym kodzie wyjścia (domyślnie innym niż 0).

Konfiguracja Supervisor

; /etc/supervisor/conf.d/worker.conf [program:worker] command=php /var/www/app/artisan queue:work --sleep=3 --tries=3 directory=/var/www/app user=www-data numprocs=4 process_name=%(program_name)s_%(process_num)02d autostart=true autorestart=unexpected startsecs=5 stopwaitsecs=10 stdout_logfile=/var/log/supervisor/worker.log redirect_stderr=true environment=APP_ENV=production
  • Uwaga: Wszystkie procesy zapisują do jednego pliku logu. Dodaj %(process_num)02d do nazwy pliku, jeśli chcesz osobny log dla każdego.

Po zapisaniu pliku wykonaj

sudo supervisorctl reread sudo supervisorctl update sudo supervisorctl status # restart po zmianie kodu: sudo supervisorctl restart worker:*

Ściąga: parametry programu w Supervisorze

Najważniejsze parametry i ich wartości w Twojej konfiguracji
ParametrCo robiW tej konfiguracji
command Polecenie uruchamiane przez Supervisora; musi działać w pierwszym planie. php /var/www/app/artisan queue:work --sleep=3 --tries=3
numprocs Ile kopii procesu uruchomić równolegle. 4
autorestart unexpected: restart po nieoczekiwanym kodzie wyjścia, true: zawsze, false: nigdy. unexpected
startsecs Ile sekund proces musi działać, by start uznać za udany. 5
stopwaitsecs Ile sekund czekać po sygnale zatrzymania, zanim Supervisor wyśle SIGKILL. 10
stopasgroup / killasgroup Wysyła sygnał do całej grupy procesów, gdy polecenie tworzy procesy potomne. nie / nie
redirect_stderr Dołącza strumień błędów do tego samego logu co stdout. tak

Jak wdrożyć plik

Zapisz konfigurację jako plik .conf w katalogu /etc/supervisor/conf.d/ (Debian i Ubuntu). Potem wykonaj supervisorctl reread i supervisorctl update. Zmiana parametrów istniejącego programu też wymaga update, a zmiana samego kodu aplikacji restartu: supervisorctl restart nazwa:*.

Workery kolejek

Ustaw stopwaitsecs wyżej niż czas najdłuższego zadania. Inaczej Supervisor po sygnale zatrzymania wyśle SIGKILL i zadanie przerwie się w połowie. Po wdrożeniu nowego kodu uruchom php artisan queue:restart, aby workery załadowały zmiany.

Kilka procesów

Gdy numprocs jest większe niż 1, process_name musi zawierać %(process_num)s lub %(process_num)02d. Każdy proces dostaje wtedy własny numer, liczony od zera. Bez tego Supervisor odrzuci plik.

Typowe pułapki

Proces musi działać w pierwszym planie, bez nohup i końcowego &. Dosłowny znak % zapisz jako %%. Użytkownik z pola user musi mieć prawo zapisu do pliku logu i do katalogu roboczego.

Oceń to narzędzie:

Powiązane narzędzia

Inne narzędzia, które mogą Ci się przydać

Generator konfiguracji Supervisor

Supervisor pilnuje procesów, które powinny działać ciągle — kolejek, websocketów, workerów. Gdy proces padnie, Supervisor go uruchamia ponownie. Generator tworzy konfigurację Supervisor dla jednego programu: sekcję [program:nazwa] gotową do zapisania jako /etc/supervisor/conf.d/nazwa.conf, razem z poleceniami supervisorctl do jej wczytania.

Najważniejsze dyrektywy

DyrektywaWartość domyślna w generatorzeCo ustawia
commandphp /var/www/app/artisan queue:work --sleep=3 --tries=3Polecenie uruchamiające proces; musi działać w pierwszym planie, bez nohup i końcowego &.
directory/var/www/appKatalog roboczy, w którym startuje proces.
userwww-dataKonto systemowe, na którym działa proces.
numprocs4Liczba równoległych kopii tego samego polecenia (1–100), każda jako osobny proces.
process_name%(program_name)s_%(process_num)02dSzablon nazwy kopii; trafia do pliku tylko wtedy, gdy numprocs jest większe niż 1.
autostarttrueCzy program ma wystartować razem z supervisordem.
autorestartunexpectedKiedy wznowić proces: unexpected po nieoczekiwanym kodzie wyjścia, true zawsze, false nigdy.
startsecs5Ile sekund proces musi działać, żeby start uznać za udany.
stopwaitsecs10Ile sekund Supervisor czeka po sygnale zatrzymania, zanim wyśle SIGKILL.
stdout_logfile/var/log/supervisor/worker.logPlik, do którego trafia standardowe wyjście procesu.
redirect_stderrtrueDołącza strumień błędów do tego samego logu.
environmentAPP_ENV=productionZmienne środowiskowe przekazywane procesowi.
stopasgroup / killasgroupwyłączoneSygnał zatrzymania lub SIGKILL trafia do całej grupy procesów, a nie tylko do procesu głównego.

Zarządzanie

Pod konfiguracją generator podaje komplet poleceń do wykonania po zapisaniu pliku: sudo supervisorctl reread wczytuje nową konfigurację, sudo supervisorctl update uruchamia nowe i zmienione programy, sudo supervisorctl status pokazuje stan procesów, a sudo supervisorctl restart worker:* restartuje wszystkie kopie programu po wdrożeniu nowego kodu.

Gotowe wzorce

Pięć przycisków nad formularzem wypełnia nazwę programu, polecenie, liczbę procesów, katalog roboczy i ścieżkę logu. Pozostałe pola (użytkownik, startsecs, stopwaitsecs, autorestart, environment) zostają bez zmian.

WzorzecNazwa programuPolecenienumprocs
Queue workerqueue-workerphp /var/www/app/artisan queue:work --sleep=3 --tries=34
Horizonhorizonphp /var/www/app/artisan horizon1
Schedulerschedulerphp /var/www/app/artisan schedule:work1
Node appnode-appnode /var/www/node/server.js2
WebSocketswebsocketsphp /var/www/app/artisan websockets:serve1

Horizon i scheduler działają w jednej kopii: Horizon sam zarządza swoimi workerami, a dwa procesy schedule:work mogłyby uruchamiać te same zadania dwa razy. Ścieżki /var/www/app i /var/www/node to przykłady, podmień je na katalog swojej aplikacji.

Jak generator składa plik konfiguracyjny

Narzędzie zamienia dane z formularza na plik w formacie ini, który czyta supervisord. Na górze jest komentarz z proponowaną ścieżką, pod nim jedna sekcja [program:nazwa] z dyrektywami. Puste pola directory, user, stdout_logfile i environment są pomijane, a stopasgroup i killasgroup pojawiają się dopiero po zaznaczeniu. Podgląd odświeża się na bieżąco, a kafelki nad kodem pokazują liczbę procesów, liczbę linii, nazwę pliku i zakres nazw procesów. Jeśli potrzebujesz kilku programów, wygeneruj osobny plik dla każdego.

Kluczowa jest dyrektywa numprocs. Nie tworzy ona jednego procesu z wieloma wątkami, ale tyle niezależnych kopii tego samego command, ile wskażesz. Każda kopia dostaje własny numer liczony od zera, wstawiany tam, gdzie w process_name użyjesz znacznika %(process_num)02d. Przy process_name równym %(program_name)s_%(process_num)02d i programie queue-worker z numprocs 4 kopie nazywają się queue-worker_00, queue-worker_01, queue-worker_02 i queue-worker_03. Gdy numprocs jest większe niż 1, a process_name nie zawiera %(process_num), formularz zgłasza błąd, bo Supervisor odrzuciłby taki plik. Dzięki numeracji supervisorctl status pokazuje każdą kopię osobno.

Trzeci element mechanizmu to cykl życia procesu. autostart decyduje, czy supervisord podniesie program razem ze swoim startem, autorestart — czy wznowi go po zakończeniu pracy, startsecs — po ilu sekundach działania start uznaje się za udany, a stopwaitsecs — ile sekund Supervisor czeka po wysłaniu sygnału zatrzymania, zanim wymusi zakończenie. Standardowe wyjście trafia do pliku stdout_logfile, a przy włączonym redirect_stderr także komunikaty błędów. Przy błędnej konfiguracji to właśnie tam najszybciej widać, czego brakuje procesowi do poprawnego startu.

Przykład: queue worker z czterema procesami

  1. Klikasz wzorzec Queue worker. Generator ustawia nazwę queue-worker, polecenie php /var/www/app/artisan queue:work --sleep=3 --tries=3, numprocs 4 i log /var/log/supervisor/queue-worker.log.
  2. Przy domyślnych pozostałych polach plik ma 14 linii: komentarz ze ścieżką, nagłówek [program:queue-worker] i 12 dyrektyw, w tym process_name, bo procesów jest więcej niż jeden.
  3. Kafelek z nazwami pokazuje queue-worker_00 … queue-worker_03. Pod kodem pojawia się ostrzeżenie, że wszystkie cztery procesy zapisują do jednego logu. Zmieniasz ścieżkę na /var/log/supervisor/queue-worker_%(process_num)02d.log i ostrzeżenie znika.
  4. Najdłuższe zadanie w kolejce trwa około minuty, więc podnosisz stopwaitsecs z 10 do 90. Przy 10 sekundach Supervisor wysłałby SIGKILL i przerwał zadanie w połowie.
  5. Zapisujesz plik jako /etc/supervisor/conf.d/queue-worker.conf, uruchamiasz sudo supervisorctl reread, a następnie sudo supervisorctl update. Status powinien pokazać 4 procesy w stanie RUNNING.
  6. Scheduler dodajesz osobno: wzorzec Scheduler daje plik scheduler.conf z numprocs 1 i bez linii process_name, czyli 13 linii. Na serwerze działa wtedy 4 + 1 = 5 procesów z dwóch plików.

Jak używać generatora w praktyce

  • Jedna sekcja na jeden program. Queue worker, websocket i scheduler mają osobne cykle życia, więc powinny mieć osobne pliki i osobne nazwy.
  • Dobierz stopwaitsecs do charakteru zadania. Worker przetwarzający duże porcje danych powinien dostać więcej czasu, niż trwa najdłuższe zadanie. Po wdrożeniu nowego kodu w Laravelu uruchom php artisan queue:restart, żeby workery wczytały zmiany.
  • Logi ustaw od razu. Zostaw włączone redirect_stderr i wskaż stdout_logfile, bo pętla restartów najczęściej wynika z brakującej zależności albo zmiennej środowiskowej, a bez logu nie widać przyczyny.
  • Gdy polecenie uruchamia procesy potomne, na przykład skrypt powłoki albo npm start, zaznacz stopasgroup i killasgroup. Bez tego po zatrzymaniu procesu głównego potomne mogą zostać w systemie.

Czego narzędzie nie zrobi

Generator wyłapuje cztery typowe pomyłki i pokazuje je pod kodem: znak % w poleceniu (dosłowny procent trzeba zapisać jako %%, np. date +%%Y), polecenie z nohup lub końcowym &, które Supervisor uznałby za zakończone i restartował w kółko, użytkownika root oraz wspólny plik logu dla kilku procesów. Formularz odrzuca też nazwę programu ze spacjami, polecenie w kilku liniach i numprocs spoza zakresu 1–100. Poza tym:

  • Nie sprawdzi, czy polecenie działa. Jeśli ścieżka do interpretera lub pliku jest błędna, dowiesz się o tym dopiero z logu procesu.
  • Nie dobierze liczby procesów za Ciebie. numprocs zależy od obciążenia i liczby rdzeni, a narzędzie nie zna zasobów Twojego serwera, więc wartość musisz wybrać sam i zweryfikować obserwacją kolejki.
  • Nie generuje całego pliku supervisord.conf. Powstaje konfiguracja programu, natomiast sekcje [unix_http_server], [supervisorctl] i [include] muszą już istnieć w instalacji Supervisora.
  • Nie wczyta pliku .env. Supervisor do środowiska odziedziczonego po supervisordzie dokłada tylko zmienne z dyrektywy environment; kilka rozdzielasz przecinkami, np. APP_ENV=production,QUEUE=default. Laravel czyta .env samodzielnie z katalogu aplikacji, ale inne programy mogą potrzebować zmiennych podanych jawnie.
  • Nie waliduje ścieżek i uprawnień. Katalogi na logi oraz konto podane w dyrektywie user muszą istnieć i mieć odpowiednie prawa, inaczej proces nie wystartuje mimo poprawnej składni.

Najczęstsze pytania

Ile procesów queue workera ustawić?

Zależy od obciążenia i liczby rdzeni. Rozsądny start to 2–4 na serwer; zwiększaj, jeśli zadania czekają w kolejce coraz dłużej. Generator przyjmuje od 1 do 100.

Czym jest process_name w Supervisorze?

To szablon nazw kopii programu, np. %(program_name)s_%(process_num)02d daje worker_00, worker_01. Przy numprocs większym niż 1 musi zawierać %(process_num).

Dlaczego proces wpada w pętlę restartów?

Zwykle brakuje zależności lub zmiennej środowiskowej albo polecenie przechodzi w tło. Sprawdź log w stdout_logfile; jeśli proces kończy się przed upływem startsecs, Supervisor po kilku nieudanych próbach oznaczy go jako FATAL.

Gdzie zapisać plik konfiguracji Supervisor?

Na Debianie i Ubuntu w katalogu /etc/supervisor/conf.d/ z rozszerzeniem .conf; tę ścieżkę generator wpisuje w pierwszej linii pliku. W innych instalacjach sprawdź dyrektywę files w sekcji [include] pliku supervisord.conf.

Jak zrestartować tylko jeden program, a nie wszystkie?

Użyj nazwy programu z gwiazdką, np. supervisorctl restart queue-worker:*, żeby objąć wszystkie kopie, albo podaj pełną nazwę jednego procesu: queue-worker:queue-worker_02.

Czym różni się autorestart true od autorestart unexpected?

true wznawia proces po każdym zakończeniu, także z kodem 0. unexpected wznawia go tylko przy kodzie wyjścia spoza listy exitcodes (domyślnie 0) i jest ustawieniem domyślnym w generatorze. Zatrzymanie przez supervisorctl stop w żadnym trybie nie wywołuje restartu.

Zainstaluj Webp.pl Miej narzędzia we własnej kieszeni!