9 コマンドの実行

Zabbixは、外部チェック、ユーザーパラメーター、system.runアイテム、カスタムアラートスクリプト、リモートコマンド、およびグローバルスクリプトに共通の機能を使用します。

実行手順

デフォルトでは、Zabbix のすべてのスクリプトは sh シェルを使用して実行され、 デフォルトのシェルを変更することはできません。別のシェルを使用するには、 回避策としてスクリプトファイルを作成し、コマンド実行時にそのスクリプトを呼び出します。

コマンド/スクリプトは、Unix と Windows の両プラットフォームで 同様に実行されます。

  1. Zabbix(親プロセス)が通信用のパイプを作成します
  2. Zabbix は、そのパイプをこれから作成される子 プロセスの出力先として設定します
  3. Zabbix が子プロセスを作成します(コマンド/スクリプトを実行します)
  4. 子プロセス用に新しいプロセスグループ(Unix)またはジョブ(Windows)が作成されます
  5. Zabbix は、タイムアウトが発生するか、または反対側に書き込む プロセスがいなくなるまでパイプから読み取ります(すべてのハンドル/ファイルディスクリプタが閉じられるまで)。 子プロセスは追加のプロセスを作成し、それらのプロセスが終了したり ハンドル/ファイルディスクリプタを閉じたりする前に終了する場合があることに注意してください。
  6. タイムアウトに達していない場合、Zabbix は最初の 子プロセスが終了するか、タイムアウトが発生するまで待機します
  7. 最初の子プロセスが終了しており、かつタイムアウトに達していない場合、 Zabbix は最初の子プロセスの終了コードを確認し、 0 と比較します(0 以外の値は実行失敗と見なされます。 これは、カスタムアラートスクリプト、リモートコマンド、および Zabbix server と Zabbix proxy 上で実行されるユーザースクリプトにのみ適用されます)
  8. この時点で、すべての処理が完了したと見なされ、 プロセスツリー全体(つまり、プロセスグループまたはジョブ)が終了されます

Zabbix は、最初の子プロセスが終了しており、かつ他のどの プロセスも出力ハンドル/ファイルディスクリプタを開いたままにしていない場合に、 コマンド/スクリプトの処理が完了したと見なします。処理が完了すると、 作成されたすべてのプロセスが終了されます。

コマンド内のすべての二重引用符とバックスラッシュは、 バックスラッシュでエスケープされ、コマンド全体は二重引用符で囲まれます。

終了コードのチェック

終了コードは、以下の条件でチェックされます。

  • ZabbixサーバーおよびZabbixプロキシ上で実行されるカスタムアラートスクリプト、リモートコマンド、ユーザースクリプトに対してのみ適用されます。
  • 0 以外の終了コードは、すべて実行失敗と見なされます。
  • 実行に失敗した場合の標準エラー出力および標準出力の内容は収集され、Webインターフェースで利用できます(実行結果が表示される場所)。
  • Zabbixエージェント/プロキシ上で実行されるリモートコマンドについては、agent/proxy の LogRemoteCommands パラメータを有効にすることで、追加のログエントリが作成される場合があります。

失敗したコマンド/スクリプトに対して、Webインターフェースに表示される可能性のあるメッセージおよびログエントリ:

  • 実行に失敗した場合の標準エラー出力および標準出力の内容(存在する場合)。
  • 「Process exited with code: N.」(出力が空で、終了コードが 0 以外の場合)。
  • 「Process killed by signal: N.」(シグナルによってプロセスが終了した場合、Linux のみ)。
  • 「Process terminated unexpectedly.」(不明な理由でプロセスが終了した場合)。

関連項目