![Monit 환경 변수를 사용하는 방법은 무엇입니까?](https://linux55.com/image/115491/Monit%20%ED%99%98%EA%B2%BD%20%EB%B3%80%EC%88%98%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
~에 따르면모니터 링크:
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
#