Como usar variáveis Monit Environment?

3

De acordo com Monit link :

No environment variables are used by Monit. However, when Monit executes a start/stop/restart program or an exec action, it will set several environment variables which can be utilised by the executable to get information about the event, which triggered the action.

É possível usar essas variáveis em ações personalizadas?

Por exemplo, para notificação, não uso o serviço de email, e sim um script personalizado que deve receber essa variável monit ENV e fornecer saída. Este é um exemplo básico para testar variáveis env.

check process dhcp with pidfile "/var/run/dhcpd.pid"
        start = "/etc/init.d/isc-dhcp-server start"
        stop = "/etc/init.d/isc-dhcp-server stop"
        if does not exist program then exec "/bin/echo $MONIT_EVENT > /tmp/monittest"
        depends on lan

E quando intencionalmente faço o programa falhar, como check process dhcp with pidfile "/var/run/unexisting.pid"

Eu não recebo saída em /tmp/monittest . Estou fazendo algo errado?

    
por fugitive 14.07.2017 / 14:39

1 resposta

3

Sim, há errado. O monit exec parece executar uma execução de exec(3) do estilo da string fornecida, e não uma system(3) call; Isso significa que a sintaxe do shell (redirecionamentos e outras coisas) não são suportadas, pois os dados fornecidos não estão sendo executados através de um shell. Em vez disso, escreva um código adequado que use as variáveis de ambiente monit (que serão exportadas para o código assim exec ed):

# cat /root/blah                                                               
#!/bin/sh
echo "$MONIT_EVENT" > /root/woot
# chmod +x /root/blah
#

E, em seguida, chame esse código a partir da configuração do monit:

# tail -2 /etc/monitrc                                                         
check process itsdeadjim with pidfile "/nopenopenope"
    if does not exist then exec "/root/blah"
# 

Isso preenche o arquivo /root/woot para mim:

# rm /root/woot
# rcctl restart monit && sleep 10
monit(ok)
monit(ok)
# cat /root/woot
Does not exist
# 
    
por 14.07.2017 / 16:13