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
sympadepende 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 restartrestartnão faz nada para arquivos, mas comosympadepende 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 restartSemelhante a
check file, a açãorestartnão faz nada pelos programas, mas força o serviçosympaa 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/pgrepcom 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.