Permanentné spustenie skriptu na serveri (supervisor)

Pri jednom projekte som riešil otázku ako udržať skript spustený nepretržite. Mohol som ho síce vložiť do init-u alebo pomocou CRONu zisťovať či skript beží a pokiaľ nie tak ho znova spustiť. Ani jedno riešenie mi však neprišlo ideálne alebo dostatočné jednoduché na prevedenie. Rozhodol som sa pre to zvoliť Supervisor.

Čo je to Supervisor?

Supervisor je program, ktorý umožňuje uživateľom monitorovať a ovládať procesy v UNIX-ových systémoch. Na rozdiel od programov ako launchd, daemontools alebo runit jeho cieľom nie je nahradiť init ako „proces č. 1“ ale zameriava sa hlavne na manažovanie užívateľských programov a projektov. To je taktiež dôvodom, prečo sa pri štarte spúšťa medzi bežnými uživateľskými procesmi.

Inštalácia

Väčšina linuxových distribúcii by ho mala mať v repozitároch takže inštalácia je teda jednoduchá:

sudo apt-get install supervisor

Nastavenie

Nastavenie supervízora je skutočne jednoduché. Stačí v priečinku /etc/supervisor/conf.d vytvoriť súbor s koncovkou .conf napríklad cez editor nano:

nano /etc/supervisor/conf.d/rss-mailing-list.conf

Obsah súboru by mal vyzerať nasledovne:

[program:rss-mailing-list]
command=/opt/rss-mailing-list/manager.py
autostart=true
autorestart=true
stderr_logfile=/var/log/rss-mailing-list.err.log
stdout_logfile=/var/log/rss-mailing-list.out.log

Myslím  si že konfiguračný súbor je zrozumiteľný aj bez vysvetlenia ale poďme si ho aj napriek tomu prejsť spoločne:

[program:rss-mailing-list]

  • obsahuje názov programu o ktorý sa jedná. Ako pri väčšine konfiguračných súborov, neodporúča sa používať diakritika a medzery

command=/opt/rss-mailing-list/manager.py

  • cesta k programu, ktorý sa má spustiť. Odporúčané je používať absolútnu cestu (celú cestu od koreňa)

autostart=true
autorestart=true

  • prvý riadok určuje či sa má program spustiť automaticky po štarte systému
  • druhý riadok určuje ako sa má zachovať v prípade že je program ukončený. Je možne nastaviť tri stavy:
    • true – program sa spustí v prípade akéhokoľvek ukončenia
    • false – program ostane ukončený
    • unexpected – program sa znova spustí len v prípade že nastalo neočakávané ukončenie (všetko okrem chybových kódov 0 a 2)

stderr_logfile=/var/log/rss-mailing-list.err.log
stdout_logfile=/var/log/rss-mailing-list.out.log

  • posledné dva riadky určujú kde sa má zapisovať výstup z programu
    • stderr_logfile – sem sa zapisujú všetky chybové výpisy odoslané na stderr (štandardný chybový výstup)
    • stdout_logfile – sem sa zapisuje všetko, čo sa zobrazí na stdout (štandardný výstup)

Spustenie

Keď máme konfiguračný súbor pripravený, je na čase aby ho supervisor načítal. Toho docielime príkazom:

supervisorctl reread

Potom stačí aktualizovať supervisor-a a program je zavedený a automatický spustený:

supervisorctl update

 

Manažovanie programov

Manažovanie je veľmi jednoduché. Nasledujúcim príkazom bez argumentov sa nám spustí iteratívny režim supervisora

supervisorctl

Potom prostredníctvom príkazov start, stop, restart vieme jednotlivé programy spustiť, zastaviť alebo reštartovať.

supervisor ovladanie

 

Taktiež vieme pomocou príkazu tail prechádzať logy

supervisor prechadzanie logov

 

A pravda vystúpime z programu príkazom quit

Záver

Supervisor je ideálne a jednoduché riešenie v prípade že potrebujete akýkoľvek skript/program nechať spustený neobmedzene dlho a nechce sa vám riešiť vlastný spôsob ako toho docieliť

Zdroje:

http://supervisord.org/

https://www.digitalocean.com/community/tutorials/how-to-install-and-manage-supervisor-on-ubuntu-and-debian-vps

Pridaj komentár

Vaša e-mailová adresa nebude zverejnená. Vyžadované polia sú označené *