障害時のアクションをスクリプトで実行する件について
お世話になります。
あるトリガーが障害になった際に、自作スクリプトを実行して対象のプロセスを再起動したいと考えています。
実際にスクリプトは実行され、再起動はしているのですが
zabbixサーバからは正常ではないらしく何度もリトライ(5回)しています。
そのため、何度も再起動してしまいます。
結果には timeout while executing a shell script と出力されています。
こういった場合は、どこか設定ファイルで許可していないのでしょうか。
EnableRemoteCommand = 1 は設定しており、sudo なども設定済みです。
===== スクリプト 中身
#!/bin/sh
echo "`date` sudo /sbin/service ****** restart $1 $2 $3" >> /var/log/zabbix/zabbix_server.log
# Localhost to *******
sudo /sbin/service ***** stop
echo $?
sleep 2
sudo /sbin/service ****** start
echo $?
# Remotehost to ******
# /usr/bin/ssh $ipaddress -l $user /usr/sbin/****** restart
sleep 1
exit 0
===============
アクションの設定
イベントソース トリガー
エスカレーション 無効
デフォルトのメッセージ {TRIGGER.NSEVERITY}
ステータス
アクションのコンディション
(A) トリガーの値 = "障害"
アクションのオペレーション
詳細 アクション
メッセージの送信先 ユーザ "Ast-restart"
オペレーションの編集
オペレーションのタイプ
メッセージの送信先
次のメディアのみ使用
ユーザのメディア
Asterisk-restart 127.0.0.1 1-7,00:00-24:00; NIWAHD
デフォルトのメッセージ
件名
メッセージ {TRIGGER.NSEVERITY}
※ zabbixサーバ上のプロセスを再起動しようと考えています。
以上です、よろしくお願い致します。
tsuzuki - 投稿数: 78
鈴木です。
これは実行しようとしているスクリプトが「sleep 2」しているために、Zabbix側のタイムアウトに引っかかっているために発生してると思われます。
confファイルでタイムアウト値を伸ばすのも有効ですが、再起動スクリプトを実行するだけして実行して、nohup などでプロセスを切り離してしまうのはどうでしょうか。
おそらく以下のようなスクリプトを別途作成して、それを実行すれば、すぐに反応が返ってくて、切り離されたプロセスでサービスの再起動がされると思います。(/some/path/service_restart を使用するスクリプトの名前に置き換えてください)
----------------------------
#!/bin/sh
nohup /some/path/service_restart &
----------------------------
よろしくお願いします。
mori - 投稿数: 20
鈴木様
ありがとう御座います。
::::::::::::::
/etc/zabbix/alertscripts/ast-restart-kick.sh
::::::::::::::
#!/bin/bash
/etc/zabbix/alertscripts/ast-restart.sh > /dev/null &
exit 0
上記のようにすることで解決しました。nohupでは標準出力に余計なものが出ますので、こちらで対応させて頂きました。
ありがとうございました。