Fizetési módok Abuse

A SuperVisor beállítása

18.04.2022, 23:02

A Linuxban a processzorok kezelésére vannak inicializáló rendszerek, mint például a systemd. Ha egyszerűbb megoldásra van szükséged, egy olyan programra, amely képes kezelni az alkalmazásod folyamatait, akár a rendszeren, akár egy Docker konténerben. Ilyen program létezik - ez a supervisor. Ez egy Python nyelven írt, funkcionálisan egyszerű, nyílt forráskódú folyamatkezelő, amellyel egy folyamatból annyi másolatot lehet futtatni, amennyit csak szükséges, és figyelemmel kísérhetjük azok állapotát. Az alábbiakban bemutatjuk, hogyan telepíthetjük és konfigurálhatjuk a Supervisort az Ubuntu 20.04-es verziószámú Ubuntu példáján.

A supervisor telepítése

A legegyszerűbben úgy juthatunk hozzá a programhoz, ha a hivatalos tárolókból telepítjük. Ehhez a parancsot kell futtatni:

$ sudo apt install supervisor

A SuperVisor beállítása

Ha azt szeretné, hogy a program állandóan fusson, akkor hozzá kell adnia az automatikus betöltőjéhez és futtatnia kell. Végrehajtás:

$ sudo systemctl enable supervisor --now

A SuperVisor beállítása

Ezután a parancs segítségével megtekintheti az állapotot:

$ sudo systemctl status supervisor

A SuperVisor beállítása

Konfigurációs folyamat

A konfigurációs fájl az /etc/supervisor/supervisord.conf címen található. Itt találhatók az alapbeállítások is. A futó folyamatok konfigurálásához célszerűbb az /etc/supervisor/conf.d/ könyvtárat használni. A fő konfigurációs fájl alapértelmezés szerint elhagyható. Lássuk, hogyan hozhatunk létre konfigurációs fájlokat a programok számára. Az egyetlen folyamatra vonatkozó szakasz szintaxisa így néz ki:

változó neve érték

Minden egyes folyamathoz át kell adni ilyen változókat, hogy automatikusan elinduljon és helyreálljon egy összeomlás után:

  • directory - munkakönyvtár;
  • command - a folyamat indításának parancsa;
  • user- a felhasználó, akinek a nevében a folyamat elindul;
  • autostart - a folyamat automatikus indítása;
  • autorestart- a folyamat újrainduljon-e;

Azonban még sok más beállítás is rendelkezésre áll, ezek közül néhányat mutatunk be, amelyeket ebben a cikkben tárgyalunk:

  • priority - az indítandó folyamat prioritása;
  • environment - a folyamatnak átadandó környezeti változók;
  • stdout_logfile - hová irányítja át a folyamat stdout kimenetét;
  • stderr_logfile - hová kell átirányítani a folyamat stderr kimenetét;
  • process_name- a folyamat neve, a másolatszám helyettesítésének lehetőségével;
  • numprocs - az indítandó folyamat másolatainak száma;
  • startretries - a program indítási kísérletek száma;
  • redirect_stderr - a folyamat hibakimenetének átirányítása a felügyelő kimenetére;
  • redirect_stdout - a folyamat kimenetének átirányítása a felügyelő kimenetére.

A jobb megértés és a példa kedvéért futtassunk egy PHP szkriptet, amely csak a háttérben fog lógni:

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

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

A folyamathoz külön supervisor konfigurációs fájlt hozhatunk létre. A konfigurációt beillesztheti közvetlenül a fő konfigurációs fájl végére, de jobb, ha ezt nem teszi. Jobb, ha minden egyes programhoz külön konfigurációs fájlt hozunk létre az /etc/supervisor/conf.d/ állományban *.conf néven. Például ehhez a programhoz ez a fájl így fog kinézni:

$ 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

Ezután újra kell indítani a supervisort, ezt a systemctl segítségével lehet megtenni:

$ sudo systemctl restart supervisor

Vagy a supervisorctl segédprogrammal:

$ sudo supervisorctl reload

A SuperVisor beállítása

A konfigurált folyamatok állapotát a következő paranccsal is láthatjuk:

A SuperVisor beállítása

Ha a folyamat RUNNING státuszban van, akkor minden rendben van, és sikeresen elindult. De ebben az esetben a folyamat egyetlen példányban fut, és elég gyakran szükség van ugyanazon folyamat több példányának futtatására. Erre a célra használhatjuk a process_name és numprocs paramétereket. Az elsővel módosíthatjuk a folyamat nevét úgy, hogy tartalmazza a másolatok számát, a másodikkal pedig megadhatjuk, hogy hány másolatot futtassunk.

A process_name változó általában egy python sztring formázási mintát tartalmaz, amely a program nevét és a folyamat számát tartalmazza: %(program_név)s_%(folyamat_szám)02d. Itt a változó neve zárójelben van, amelyet a típusa követ. Ha például ugyanazt a programot négy szálon szeretnénk futtatni, a konfigurációs fájlban ezt a formát kell beállítani:

$ 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

Most újra be kell töltenünk a supervisorctl-t, és már 4 folyamat fog futni:

$ sudo supervisorctl status

A SuperVisor beállítása

Ugyanakkor lehetőség van arra, hogy a program által kimenő összes adatot a naplófájlba mentsük. Erre a célra az stdout_logfile és az stderr_logfile paraméterek szolgálnak. Így például a program végrehajtásáról készült naplófájlt közvetlenül a program mappájába adhatja ki.

$ 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

A szolgáltatás újraindítása után a naplófájlok a program mappájában fognak megjelenni:

A SuperVisor beállítása

Hasonlóképpen, ha a folyamatok kimenetét át akarja irányítani a szabványos felügyelői kimenetre, akkor a redirect_stderr és redirect_stdout paramétereket kell használnia. Ha a programodnak szüksége van környezeti változókra, akkor azokat a környezeti paraméterrel adhatod át. A változókat vesszővel kell írni. Például:

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

Minden egyes konfigurációs módosítás után ne felejtse el újraindítani a supervisort, hogy a módosítások érvényesüljenek. A supervisorctl segédprogram használható a folyamatok vezérlésére. Mint már rájött, a folyamatok listájának megtekintéséhez a futtatására van szükség:

$ sudo supervisorctl status

Ezután a folyamat nevének ismeretében újraindíthatja azt, például process:process_00:

$ sudo supervisorctl restart process:process_00

A SuperVisor beállítása

Leállítása:

$ sudo supervisorctl stop process:process_00

Vagy indítsa el:

$ sudo supervisorctl start process:process_00

Alternatívaként csatlakozhatsz a folyamathoz, és megnézheted, hogy mit ad ki az stdout/stderr-re az fg parancs segítségével:

$ sudo supervisorctl fg process:process_00

Megnéztük, hogyan kell a supervisort konfigurálni, és hogyan kell használni a folyamatkezelő szoftvert.