~によるとモニタリンク:
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
#