Environment-Variables

如何使用監控環境變數?

  • July 14, 2017

根據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。難道我做錯了什麼?

是的,有錯誤。monitexec似乎執行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
# 

引用自:https://unix.stackexchange.com/questions/378453