zabbix 1.8.15へバージョンアップ後、アクションのリモートコマンドが動作しない
お世話になっております。
CentOS 5.4を使用しております。
先日、zabbix 1.8.3からzabbix 1.8.15へバージョンアップを行ったところ、
アクションのリモートコマンドより、スクリプトの実行が出来なくなりました。
#yum update zabbixでのバージョンアップ。zabbix-serverとzabbix-agentは再起動しています。
#configファイルは旧バージョンのものをそのまま使用。新バージョンのconfigとの差異はコメントアウトの部分のみなのは確認済み。
rshなど、標準コマンドを実行するリモートコマンド定義は動くのですが、
スクリプトを実行するリモートコマンドは、
Zabbixコンソールからはアクションが実行され、スクリプトを実行した形跡があるのですが、
OS上で見ると、スクリプトが動作した形跡がありません。
■リモートコマンドより実行NGなパターン
元から使用していたスクリプトが動かないので、
以下のような単純なログを出力するだけのスクリプトでテストしてみましたが動作しません
パーミッション等は許可してあります。
/hoge/hoge.sh
<ソース>
#!/bin/sh
echo "hoge" >> /tmp/hoge.log
<リモートコマンドの設定>
ホスト名:/bin/sh /hoge/hoge.sh
■リモートコマンドより実行OKなパターン
以下のようにcatやrshなど標準コマンドを実行するようなものは動作します。
<リモートコマンドの設定>
ホスト名:/bin/cat /hoge/hoge.txt >> /tmp/hoge.log
ホスト名:/usr/bin/rsh -l root IPアドレス ACOP 00000000
■zabbix_agentd.log
デバッグレベルを上げて実行しましたが、ログ内容に違いはありませんでした。
7799:20121017:083511.549 Requested [system.run["/bin/cat /hoge/hoge.txt >> /tmp/hoge.log","nowait"]]
7799:20121017:083511.549 Executing command '/bin/cat /hoge/hoge.txt >> /tmp/hoge.log'
7799:20121017:083511.552 Sending back [1]
7798:20121017:083511.554 Processing request.
7798:20121017:083511.555 Requested [system.run["/bin/sh /hoge/hoge.sh","nowait"]]
7798:20121017:083511.555 Executing command '/bin/sh /hoge/hoge.sh'
7798:20121017:083511.558 Sending back [1]
7798:20121017:083511.560 Processing request.
■zabbix_agentd.conf
EnableRemoteCommands=1 になっています。
■その他調べたところ
アイテムで、system.run[/bin/sh /hoge/hoge.sh,nowait]と設定したところ、正常に実行されました。
同じ設定でも、アイテムとしては動作しますが、
リモートコマンドから実行したときに動作しないので非常に悩んでいます。
どちらも裏ではsytem.runを実行していると思うのですが、何か動作が違うのでしょうか?
それとも何かZabbixのバージョンアップ後に、リモートコマンドを実行するのに必要な設定が別にあるのでしょうか?
以上、よろしくお願い致します。
TNK - 投稿数: 4769
CentOS 5.8上にZABBIX-JPのZabbix 1.8.3-1のパッケージを利用し
て環境を構築しました。
zabbix_agentd.confの変更点は、
EnableRemoteCommands
Server
Hostname
ListenIP
です。
そして、アクションとして、
オペレーションのタイプ:
リモートコマンド
リモートコマンド:
zbxupagt:/bin/sh /opt/hoge/hoge.sh
(zbxupagtは、試験用に構築したホストのホスト名です)
を設定して動くことを確認後、yum updateでZabbixのサーバ側も
エージェントも両方とも1.8.15-1にアップデートしました。
そのアップデートした環境で、改めて障害を発生させてアクション
が呼び出され正常にシェルスクリプト「/opt/hoge/hoge.sh」が実
行できることを確認いたしました。
パーミッションは確認されているとのことで問題は無いと思います
が、出力先のファイルは誰でも書き込み可に設定しています。
なお、1.8.3から1.8.15へのアップデート時には、Zabbixの設定フ
ァイルは一切変更していません。
system.run[]では正常に実行されるとのことですので、リモートコ
マンド呼び出し時と、何らかの処理が異なるのかもしれませんが、
考えられる要素として入力されている文字列に何らかの問題を引き
起こす要因が含まれているのかもしれません。
リモートコマンドに設定された文字列を、実際に入力された文字で
そのままご提示頂けませんでしょうか?
ホスト名にスペースを1つ含むようなものであれば、問題なく実行
できることは確認できていますが、可能性の1つとして確認させて
頂ければと思います。
tafujisawa - 投稿数: 6
お世話になっております。
コメントありがとうございます。
>パーミッションは確認されているとのことで問題は無いと思います
>が、出力先のファイルは誰でも書き込み可に設定しています。
非常に初歩的なミスをしていました。
ログが書かれずに動作しないと思っていたのはここが原因で、
zabbixユーザが書き込み出来ないファイル/ディレクトリを指定していました。
#テスト時に一度rootユーザでログを作っていたり、ディレクトリがzabbixに許可されていなかったりしておりました。
アイテムでは正常に動作したのもテストのタイミングでログファイルを手動で消していたからだと思われます。
大変申し訳ございません。
ただ、相変わらず元々動いていたスクリプトが動作しないため、原因を調査していたところ、
自己解決致しました。
スクリプト内に環境変数の設定が必要なコマンドがあるのですが、
今回、zabbixのバージョンアップを行う際、
serviceコマンドを使用してzabbixをSTOP/STARTさせたため、
zabbixに環境変数が継承されておらず、スクリプト内でも環境変数をセットしていなかっため、
スクリプトが動かなったようです。
これまではずっと/etc/init.d/からzabbixをSTOPとSTARTをしていたため、
rootの環境変数をzabbixが継承しており、動作していたようです。
実は今回の事象が発生するまで、serviceと/etc/init.d/からの起動停止は同じ動作だと思っておりましたので、
非常に勉強になりました。
今後、zabbixで起動するスクリプトには必ず環境変数を設定するように注意するようにします。
混乱させる投稿となってしまい申し訳ございません。
回答ありがとうございました。