Uz podle prvnich vet je jasne, ze monit nesupervizuje procesy, ale vyuziva jejich pid souboru. Vybrano z FAQ:
1. Q: Monit watches processes by a pid file, so if a program crashes without removing its pid file, then monit won't recognize it, right?
A: Monit will always check that a pid in a pid file belongs to a
*running* process.
Dodavam: Jak monit pozna, ze proces tohoto pid je stejny jako puvodni? Co kdyz program spadl a mezitim byl spusten proces se stejnym pid?
2. Q: I have a program that does not create its own pid file. Since monit requires all programs to have a pid file, what do I do?
A: Create a wrapper script and have the script ...
Dodavam: To je presne ten pripad mysql, kdy to nebude fungovat, protoze prvni mysql proces, ktery je rodicem ostatnich nebyva tim, ktery vypina mysql. Mozna uz se to zmenilo, ale toto chovani neni jednoznacne.
Jinymi slovy, monit je neco jako nadstavba init.d skriptu, ale neresi to, co resi daemontools, protoze je zde onen zakladni rozdil - daemontools nepousteji sluzby na pozadi.
Monit resi, ze kdyz sluzba prestane byt dostupna, zrestartuje ji. Hmm. Ale proc by to mel resit init system? Na tohle mam vlastni VELMI jednoduchy checkalive skript napsany v Ruby, cca tricet radku, ktery se zkousi zalogovat na ftp a stahnout odsud soubor, stahnout stranku pres http a vylistovat mysql tabulku. Spoustim ho kazdou minutu z cronu. Ale neni problem skript obalit nekonecnou smyckou, a udelat z nej udelat daemona + spoustet ho daemontools a testovat to i v kratsich intervalech.
A o tom je prave DJBware - neresit neco programem, kdyz to jde jednoduse vyresit v "userspace" pomoci primitivnich skriptu.
ad. 1) pokud proces umre a opet se nastartuje se stejnym pid (coz je malo pravdepodobne vzhledem k tomu ze pid se pro nove procesy roste) v okne kratsim nez je sonda schopna zjistit, nemusi to znamenat nutne problem - pokud by proces po takovem restartu nefungoval , sonda to stejne zjistit a provede akci, pokud by fungoval, neni treba nic podnikat.
Vyuziti pid ma take nektere vyhody - umoznuje to zacit monitorovat jiz bezici proces (sluzba nemusi byt nastartovana pod kontrolou monitu).
Souhlasim ze pro nektere ucely se zavislost na pid nehodi - jedna z planovanych vlastnosti monitu je rozsireni o moznost kontroly procesu bez zavislosti na pidfile(shodou okolnosti na toto tema probehla nedavno na mailinglistu monitu diskuze).
Ve srovnani se skripty je to dle meho nazoru mnohem kompaktnejsi reseni - umoznuje sledovat u procesu vyuziti CPU, pameti, podporuje zavislosti mezi monitorovanymi sluzbami, umoznuje sledovat obsazeni disku, vlastnosti souboru, adresaru a vzdalenych hostitelu/sluzeb. Stav je mozne sledovat a procesy/sluzby ovladat pres webove rozhranni. Skripty to jde samozrejme take, toto je ale hotove reseni, rudiz to da mene prace a vzhledem k tomu ze je monit psan v C je ve srovnani se skripty take mene narocny. Je toho pomerne dost, asi nema cenu to rezebirat, kdo ma chut, necht si to zkusi ...
Uvedl jse monit jenom jako alternativu - netvrdim ze monit je jedine reseni, kazdemu muze vyhovovat neco jineho ;)