Monit 환경 변수를 사용하는 방법은 무엇입니까?

Monit 환경 변수를 사용하는 방법은 무엇입니까?

~에 따르면모니터 링크:

Monit은 환경 변수를 사용하지 않습니다. 그러나 Monit이 프로그램 시작/중지/다시 시작 또는 실행 작업을 수행할 때 실행 파일이 작업을 트리거한 이벤트에 대한 정보를 얻는 데 사용할 수 있는 여러 환경 변수를 설정합니다.

사용자 정의 작업에서 이러한 변수를 사용할 수 있습니까?

예를 들어 알림의 경우 메일 서비스를 사용하지 않고 ENV monit 변수를 수신하고 출력을 제공해야 하는 사용자 정의 스크립트를 사용합니다. 이는 환경 변수 테스트의 기본 예입니다.

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

의도적으로 프로그램을 실패하게 만들 때 check process dhcp with pidfile "/var/run/unexisting.pid"

에서 어떤 출력도 얻지 못합니다 /tmp/monittest. 내가 뭐 잘못 했어요?

답변1

예, 오류가 있습니다. monit은 호출이 아닌 지정된 문자열의 스타일 실행을 exec수행하는 것으로 보입니다 . 이는 제공된 데이터가 셸을 통해 실행되지 않기 때문에 셸 구문(리디렉션 등)이 지원되지 않음을 의미합니다. 대신 monit 환경 변수(이와 같은 코드로 내보내짐 )를 사용하는 적절한 코드를 작성하세요.exec(3)system(3)exec

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

그런 다음 monit 구성에서 이 코드를 호출하십시오.

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

그러면 /root/woot파일이 자동으로 채워집니다.

# rm /root/woot
# rcctl restart monit && sleep 10
monit(ok)
monit(ok)
# cat /root/woot
Does not exist
# 

관련 정보