Monit umi to same, ale navic kontroluje nejenom jestli proces bezi, ale jestli taky dela to co ma (reaguje na sitove requesty), nezere moc CPU (napr. zacykleni) ani pameti (napr. memory leak).
Napr. konfigurace pro Apache, ktera restartuje apache pokud spadne, kontroluje zda odpovida na requesty, kontroluje vyuziti CPU a pameti:
check process apache with pidfile /var/run/httpd.pid
start program = "/etc/init.d/httpd start"
stop program = "/etc/init.d/httpd stop"
if failed port 80 protocol http then restart # testovani http://127.0.0.1:80
if totalcpu usage > 75% then alert # soucet cpu usage vsech apache children
if totalmemory > 75% then alert # soucet memory usage vsech apache children
To je sice pravda, ale je pouziti scriptu pro start misto vlastniho fork+exec opravdu problem?
To jestli se pouzivaji pro start/stop sluzeb init scripty (nebo upstart/systemd/daemontools apod. start+stop metody) je celkem irelevantni - podstatne je jestli je monitorovaci system schopny detekovat ze dana sluzba nebezi a opravit ji - ne jestli ji nastartuje prostrednictvim nejakeho externiho scriptu nebo primo pomoci fork+exec.
Vyhodou Monitu je, ze krome situace kdy sluzba nebezi protoze daemon spadnul umi detekovat i stavy kdy bezi ale nechova se normalne. Umi tak predchazet vice chybam nez jina reseni.
Monit umi krome procesu hlidat dalsi veci - system load, system memory+swap usage, disk usage, atd. a provazat sluzby zavislostmi => napr. pokud se naplni filesystem kde jsou ulozena data dane sluzby a ta kvuli tomu prestane fungovat, umi na to upozornit , nebo spustit script ktery se pokusi filesystem vycistit - odstranit docasne soubory, apod. a sluzbu tak znovu rozbehnout. Pokud supervizor monitoruje jen existenci procesu a ten dal bezi i kdyz kvuli plnemu filesystemu nefunguje, supervizor nezahlasi zadnou chybu (Monit naproti tomu zjisti je proces nefunguje spravne i bez monitorovani filesystemu - diky protocol testu dane sluzby).
Dalsi vyhodou Monitu je, ze vyuziva minimum zdroju (je napsany v C) a ma minimum zavislosti - da se slinkovat staticky a pak potrebuje jen libc. Supervizor je napsany v python a stava se tak daleko vice pro vlastni funkci zavisly na externich knihovnach - pokud se napr. nektera z prerequisite knihoven nebo python "rozbije" (napr. nepovedeny upgrade, bug, apod.), pak supervizor sam muze byt problemem postizen a monitorovani se zastavi. Monit naproti tomu pobezi dokud se nerozpadne cely system (samozrejme pokud neni bug v samotnem Monit a z praxe je velmi stabilni).
Omlouvam se ze jsem s apache nedal zrovna nejlepsi priklad - Monit init scripty take nepotrebuje (v pripade apache se to byla celkem logicka volba).
Priklad pro Monit bez init scriptu:
check process django matching "manage.py"
start program = "/usr/bin/python /home/user/djangoproject/manage.py runserver" as uid cx and gid cx