Existem duas soluções possíveis que encontrei. Ambos não são ideais, mas funcionam no meu cenário:
-
Para cada subserviço, verifique apenas se o arquivo PID existe e suponha que o serviço esteja online, se o arquivo existir. Como antes, o serviço principal
sympa
depende dos subserviços:check process sympa with pidfile /var/run/sympa/sympa.pid start program = "/etc/init.d/sympa start" stop program = "/etc/init.d/sympa stop" depends on sympa_bounced, sympa_bulk check file sympa_bounced with path /var/run/sympa/bounced.pid if does not exist then restart check file sympa_bulk with path /var/run/sympa/bulk.pid if does not exist then restart
restart
não faz nada para arquivos, mas comosympa
depende dos subserviços, ele será reiniciado. -
Com novas versões de monit, você também pode executar um comando e passar argumentos para o comando:
check process sympa with pidfile /var/run/sympa/sympa.pid start program = "/etc/init.d/sympa start" stop program = "/etc/init.d/sympa stop" depends on sympa_bounced, sympa_bulk check program sympa_bounced with path "/usr/bin/pgrep --pidfile /var/run/sympa/bounced.pid" if does not exist then restart check program sympa_bulk with path "/usr/bin/pgrep --pidfile /var/run/sympa/bulk.pid" if does not exist then restart
Semelhante a
check file
, a açãorestart
não faz nada pelos programas, mas força o serviçosympa
a reiniciar.Com versões mais antigas (por exemplo,
5.4
, a versão atual no Debian Wheezy), você não pode passar argumentos para um comando, então você pode escrever um script simples (uma linha) para cada serviço que executa/usr/bin/pgrep
com os respectivos argumentos.
Com ambas as soluções, sympa
é reiniciado uma vez se qualquer um dos subservices falhar ou se sympa
não estiver sendo executado.