私はWebサーバーでNagiosを実行しています。特に、このNagiosサービスチェックの場合、失敗するとスクリプトが実行されます。スクリプトはNagiosイベントハンドラを介してトリガされます。
Nagiosイベントハンドラコマンド:
define command{
command_name testDisableServer
command_line /usr/local/nagios/etc/objects/event_handlers/testDisableServer.sh
}
次のようにNagiosイベントハンドラでtestDisableServer.shというスクリプトを実行しています。
#!/bin/bash
wall "Script execution started";
/usr/bin/sudo /root/scripts/disableServer.sh force
"testDisableServer.sh"スクリプトには、次の権限があります。
-rwxr-xr-x 1 nagios nagios 2.0K Oct 12 14:57 testDisableServer.sh
サービスが中断されると、SSH接続に「スクリプトの実行が開始されました」というライトボックスの投稿が表示されますが、私の無効化Server.shスクリプトはトリガーされません。無効Server.shに別のライトボックスの投稿を配置しようとしましたが、実行されませんでした。
このスクリプトはユーザー「nagios」によって実行されます。以下のようにvisudoに「nagios」を追加しました。
nagios ALL=(ALL)NOPASSWD:/root/scripts/disableServer.sh
ユーザー "nagios"でコマンドラインからこのスクリプトを実行すると、完璧に動作します。ただし、イベントハンドラがこれを実行すると、出力はありません。出力をログファイルにキャプチャしようとしましたが、何も取得できませんでした。 /root/scripts/disableServer.sh の権限は次のとおりです。
-rwxr-xr-x 1 root root 2.0K Oct 12 15:01 disableServer.sh
イベントハンドラが「testDisableServer.sh」に到達しましたが、Nagiosイベントハンドラで「disableServer.sh」を実行しませんが、ユーザーnagiosでSSH接続で正しく機能するのはなぜですか?ところで、「testDisableServer.sh」は、イベントハンドラが正常に動作していることを確認するために追加のレイヤーを追加します(そのように見えるようです)。このスクリプトの実行がすべて解決されると削除されます。
答え1
それはおそらく環境の問題でしょう(スクリプトはnagiosで実行するときに利用できない環境の何かに依存します)。
スクリプトを次のように変更します(今はデバッグ用)。
#! /bin/bash -
exec 2> /tmp/log."$$"
set -x
wall "Script execution started";
/usr/bin/sudo /root/scripts/disableServer.sh force
set -x
そして上にもう1つ追加disableServer.sh
/tmp/log.*
(ファイルから)何が起こっているのかを確認してください。
答え2
私の場合、問題は次のとおりです。
sudo: sorry, you must have a tty to run sudo
したがって、/ etc / sudoersをコメントアウトして無効にすることができます。
Defaults requiretty
とにかくこれは無駄です。