/ Tipy a Triky

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ť.
          Selection_005

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

          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