Způsoby platby Abuse

Jak nastavit aplikaci SuperVisor

18.04.2022, 23:02

Pro správu procesorů v Linuxu existují inicializační systémy, jako je systemd. Pokud potřebujete jednodušší řešení, můžete použít program, který dokáže spravovat procesy vaší aplikace, a to buď v systému, nebo v kontejneru Docker. Takový program existuje - je jím supervisor. Jedná se o funkčně jednoduchý open-source správce procesů napsaný v jazyce Python, který lze použít ke spuštění libovolného počtu kopií procesu a sledování jejich stavu. Níže si ukážeme, jak Supervisor nainstalovat a nakonfigurovat na příkladu Ubuntu 20.04.

Instalace programu Supervisor

Nejjednodušší způsob, jak program získat, je nainstalovat jej z oficiálních repozitářů. K tomu je třeba spustit příkaz:

$ sudo apt install supervisor

Jak nastavit aplikaci SuperVisor

Pokud chcete, aby program běžel neustále, musíte jej přidat do automatického spouštěče a spustit. Spustit: V případě, že je program spuštěn, můžete jej spustit:

$ sudo systemctl enable supervisor --now

Jak nastavit aplikaci SuperVisor

Dále si můžete zobrazit stav pomocí příkazu:

$ sudo systemctl status supervisor

Jak nastavit aplikaci SuperVisor

Proces konfigurace

Konfigurační soubor se nachází na adrese /etc/supervisor/supervisord.conf. Zde se také nachází základní nastavení. Pro konfiguraci běžících procesů je lepší použít adresář /etc/supervisor/conf.d/. Hlavní konfigurační soubor lze ponechat ve výchozím nastavení. Podívejme se, jak vytvořit konfigurační soubory pro programy. Syntaxe oddílu pro jeden proces vypadá následovně:

název proměnné hodnota

Pro každý proces je nutné předat takové proměnné, aby se automaticky spustil a zotavil po pádu:

  • directory - pracovní adresář;
  • příkaz - příkaz pro spuštění procesu;
  • user- uživatel, jehož jménem bude proces spuštěn;
  • autostart - zda se má proces automaticky spustit;
  • autorestart- zda se má procesznovu spustit;

Nastavení je však k dispozici mnohem více, zde jsou uvedena některá z nich, o kterých bude pojednáno v tomto článku:

  • Priorita - priorita procesu, který má být spuštěn;
  • prostředí - proměnné prostředí, které mají být procesu předány;
  • stdout_logfile - kam se má přesměrovat výstup stdout procesu;
  • stderr_logfile - kam se má přesměrovat výstup stderr procesu;
  • process_name- název procesu s možností nahradit číslo kopie;
  • numprocs - počet kopií procesu, který má být spuštěn;
  • startretries - počet pokusů o spuštění programu;
  • redirect_stderr - přesměrování chybového výstupu procesu na výstup supervizora;
  • redirect_stdout - přesměruje výstup procesu na výstup supervizora.

Pro lepší pochopení a příklad si spustíme PHP skript, který bude jen viset na pozadí:

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

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

Pro tento proces můžete vytvořit samostatný konfigurační soubor supervizoru. Konfiguraci můžete vložit přímo na konec hlavního konfiguračního souboru, ale je lepší to nedělat. Lepší je vytvořit pro každý program samostatný konfigurační soubor v /etc/supervisor/conf.d/ s názvem *.conf. Například pro tento program bude tento soubor vypadat takto:

$ 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

Pak je třeba restartovat supervisor, to lze provést pomocí systemctl:

$ sudo systemctl restart supervisor

Nebo pomocí nástroje supervisorctl:

$ sudo supervisorctl reload

Jak nastavit aplikaci SuperVisor

Stav nakonfigurovaných procesů můžete také zjistit pomocí příkazu:

Jak nastavit aplikaci SuperVisor

Pokud je proces ve stavu BĚŽÍ, je vše v pořádku a byl úspěšně spuštěn. V tomto případě však proces běží v jediné instanci a poměrně často je třeba spustit více kopií téhož procesu. K tomuto účelu můžeme použít parametry process_name a numprocs. První z nich umožňuje upravit název procesu tak, aby obsahoval číslo kopie, a druhý umožňuje určit, kolik kopií má být spuštěno.

Proměnná process_name obvykle obsahuje vzor pro formátování řetězce v jazyce python, který obsahuje název programu a číslo procesu: %(program_name)s_%(process_num)02d. Zde je název proměnné v závorce, za kterou následuje její typ. Chcete-li například spustit stejný program ve čtyřech vláknech, měl by být konfigurační soubor nastaven v tomto tvaru:

$ 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

Nyní musíme znovu načíst supervisorctl a budou spuštěny 4 procesy:

$ sudo supervisorctl status

Jak nastavit aplikaci SuperVisor

Současně je možné uložit všechna data vypsaná programem do souboru protokolu. K tomu slouží parametry stdout_logfile a stderr_logfile. Například můžete vypsat soubor protokolu o jeho spuštění přímo do složky s 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 restartování služby se protokoly objeví ve složce s programem:

Jak nastavit aplikaci SuperVisor

Podobně pokud chcete přesměrovat výstup procesů na standardní výstup supervizora, použijte parametry redirect_stderr a redirect_stdout. Pokud váš program potřebuje nějaké proměnné prostředí, můžete je předat pomocí parametru prostředí. Proměnné by se měly psát s čárkami. Například:

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

Po každé změně konfigurace nezapomeňte restartovat program supervisor, aby se změny uplatnily. K řízení procesů lze použít nástroj supervisorctl. Jak jste si již uvědomili, pro zobrazení seznamu procesů je třeba spustit:

$ sudo supervisorctl status

Poté, když znáte název procesu, můžete jej restartovat, například process:process_00:

$ sudo supervisorctl restart process:process_00

Jak nastavit aplikaci SuperVisor

Zastavit:

$ sudo supervisorctl stop process:process_00

nebo spustit:

$ sudo supervisorctl start process:process_00

Případně se můžete k procesu připojit a pomocí příkazu fg zjistit, co vypisuje na stdout/stderr:

$ sudo supervisorctl fg process:process_00

Podívali jsme se na to, jak se konfiguruje supervizor a jak používat software pro správu procesů.