Maksutavat Abuse

SuperVisorin käyttöönotto

18.04.2022, 23:02

Prosessoreiden hallintaan Linuxissa on olemassa systemd:n kaltaisia alustavia järjestelmiä. Jos tarvitset yksinkertaisemman ratkaisun, voit käyttää ohjelmaa, joka voi hallita sovelluksesi prosesseja joko järjestelmässä tai Docker-säiliössä. Tällainen ohjelma on olemassa - se on supervisor. Se on toiminnallisesti yksinkertainen Python-kielellä kirjoitettu avoimen lähdekoodin prosessinhallintaohjelma, jolla voidaan ajaa niin monta kopiota prosessista kuin tarvitaan ja seurata niiden tilaa. Alla näytämme, miten Supervisor asennetaan ja konfiguroidaan käyttäen esimerkkinä Ubuntu 20.04:ää.

Supervisorin asentaminen

Helpoin tapa hankkia ohjelma on asentaa se virallisista arkistoista. Tätä varten sinun on ajettava komento:

$ sudo apt install supervisor

SuperVisorin käyttöönotto

Jos haluat, että ohjelma toimii koko ajan, sinun on lisättävä se automaattiseen latausohjelmaan ja ajettava se. Suorita:

$ sudo systemctl enable supervisor --now

SuperVisorin käyttöönotto

Seuraavaksi voit tarkastella tilaa komennolla:

$ sudo systemctl status supervisor

SuperVisorin käyttöönotto

Konfigurointiprosessi

Konfiguraatiotiedosto sijaitsee osoitteessa /etc/supervisor/supervisord.conf. Siellä sijaitsevat myös perusasetukset. Käynnissä olevien prosessien konfigurointiin kannattaa käyttää hakemistoa /etc/supervisor/conf.d/. Pääasetustiedoston voi jättää oletuksena. Katsotaan, miten ohjelmia varten luodaan konfiguraatiotiedostoja. Yksittäisen prosessin osion syntaksi näyttää tältä:

muuttuja nimi arvo

Kullekin prosessille on annettava tällaiset muuttujat, jotta se käynnistyy ja palautuu automaattisesti kaatumisen jälkeen:

  • directory - työhakemisto;
  • command - komento, jolla prosessi käynnistetään;
  • user- käyttäjä, jonka puolesta prosessi käynnistetään;
  • autostart - käynnistetäänkö prosessi automaattisesti;
  • autorestart- käynnistetäänkö prosessi uudelleen;

Käytettävissä on kuitenkin paljon muitakin asetuksia, joista joitakin käsitellään tässä artikkelissa:

  • priority - käynnistettävän prosessin prioriteetti;
  • environment - prosessille välitettävät ympäristömuuttujat;
  • stdout_logfile - mihin prosessin stdout-ulostulo ohjataan;
  • stderr_logfile - mihin ohjataan prosessin stderr-ulostulo;
  • process_name- prosessin nimi, joka voidaan korvata kopionumerolla;
  • numprocs - käynnistettävän prosessin kopioiden lukumäärä;
  • startretries - ohjelman käynnistysyritysten lukumäärä;
  • redirect_stderr - ohjaa prosessin virhetulosteet supervisor-ulostuloon;
  • redirect_stdout - prosessin ulostulon ohjaaminen valvontaohjelman ulostuloon.

Paremman ymmärryksen ja esimerkin vuoksi suoritetaan PHP-skripti, joka vain roikkuu taustalla:

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

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

Voit luoda prosessille erillisen supervisor-konfiguraatiotiedoston. Voit lisätä konfiguraation suoraan pääkonfiguraatiotiedoston loppuun, mutta sitä ei kannata tehdä. On parempi luoda jokaiselle ohjelmalle oma konfigurointitiedosto /etc/supervisor/conf.d/: een nimellä *.conf. Esimerkiksi tätä ohjelmaa varten tämä tiedosto näyttää seuraavalta:

$ 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

Sitten sinun on käynnistettävä supervisor uudelleen, tämä voidaan tehdä systemctl:llä:

$ sudo systemctl restart supervisor

Tai supervisorctl-apuohjelmalla:

$ sudo supervisorctl reload

SuperVisorin käyttöönotto

Voit myös nähdä määritettyjen prosessien tilan komennolla:

SuperVisorin käyttöönotto

Jos prosessi on RUNNING-tilassa, kaikki on hyvin ja se käynnistettiin onnistuneesti. Tässä tapauksessa prosessi on kuitenkin käynnissä yhdessä instanssissa, ja melko usein on tarpeen ajaa useita kopioita samasta prosessista. Tähän tarkoitukseen voimme käyttää parametreja process_name ja numprocs. Ensimmäisen avulla voit muuttaa prosessin nimen sisältämään kopion numeron, ja toisen avulla voit määrittää, kuinka monta kopiota on ajettava.

Process_name-muuttuja sisältää yleensä python-merkkijonon muotoilumallin, joka sisältää ohjelman nimen ja prosessin numeron: %(program_name)s_%(process_num)02d. Tässä muuttujan nimi on suluissa ja sen jälkeen sen tyyppi. Jos esimerkiksi haluat ajaa samaa ohjelmaa neljässä säikeessä, asetustiedoston tulisi olla tässä muodossa:

$ 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

Nyt meidän on ladattava supervisorctl uudelleen ja 4 prosessia on käynnissä:

$ sudo supervisorctl status

SuperVisorin käyttöönotto

Samalla on mahdollista tallentaa kaikki ohjelman tuottamat tiedot lokitiedostoon. Tähän tarkoitukseen käytetään parametreja stdout_logfile ja stderr_logfile. Voit esimerkiksi tulostaa sen suorituksen lokitiedoston suoraan kansioon, jossa ohjelma on.

$ 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

Kun palvelu käynnistetään uudelleen, lokitiedostot näkyvät kansiossa, jossa ohjelma on:

SuperVisorin käyttöönotto

Vastaavasti, jos haluat ohjata prosessien tulosteet ohjaajan vakiotulosteeseen, käytä redirect_stderr- ja redirect_stdout-parametreja. Jos ohjelmasi tarvitsee ympäristömuuttujia, voit antaa ne ympäristöparametrilla. Muuttujat on kirjoitettava pilkuilla. Esim:

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

Muista käynnistää supervisor uudelleen jokaisen konfiguraatiomuutoksen jälkeen, jotta muutokset tulevat voimaan. Supervisorctl-apuohjelmaa voidaan käyttää prosessien ohjaamiseen. Kuten olet jo huomannut, nähdäksesi luettelon prosesseista sinun on suoritettava:

$ sudo supervisorctl status

Sitten kun tiedät prosessin nimen, voit käynnistää sen uudelleen, esimerkiksi process:process_00:

$ sudo supervisorctl restart process:process_00

SuperVisorin käyttöönotto

Pysäytä:

$ sudo supervisorctl stop process:process_00

Tai käynnistä:

$ sudo supervisorctl start process:process_00

Vaihtoehtoisesti voit muodostaa yhteyden prosessiin ja nähdä, mitä se antaa stdout/stderr: ään komennolla fg:

$ sudo supervisorctl fg process:process_00

Olemme tarkastelleet, miten supervisor on konfiguroitu ja miten prosessinhallintaohjelmistoa käytetään.