Environment-Variables
如何使用監控環境變數?
根據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
。難道我做錯了什麼?
是的,有錯誤。monit
exec
似乎執行exec(3)
給定字元串的樣式執行,而不是system(3)
呼叫;這意味著不支持 shell 語法(重定向和諸如此類),因為提供的數據沒有通過 shell 執行。相反,編寫使用 monit 環境變數的合適程式碼(將被導出到因此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 #