Sidebar

Zabbix Summit 2022
Register for Zabbix Summit 2022

10 コマンドの実行

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

実行手順

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

  1. Zabbix(親プロセス)は通信用のパイプを作成します。
  2. Zabbixは作成される子プロセスの出力としてパイプを設定します。
  3. Zabbixは子プロセスを作成します(コマンド/スクリプトを実行します)。
  4. 子プロセス用に新しいプロセスグループ(Unixの場合)またはジョブ(Windowsの場合)が作成されます。
  5. Zabbixはタイムアウトが発生するか、誰も書き込みを行わなくなる(すべてのハンドル/ファイル記述子が閉じられる)までパイプから読み取ります。子プロセスは、ハンドル/ファイル記述子を終了または閉じる前に、さらに多くのプロセスを作成して終了できることに注意してください。
  6. タイムアウトしていない場合、Zabbixは最初の子プロセスが終了するかタイムアウトが発生するまで待機します。
  7. 最初の子プロセスが終了し、タイムアウトに達していない場合、Zabbixは最初の子プロセスの終了コードをチェックして0と比較します。(ゼロ以外の値は、ZabbixサーバーおよびZabbixプロキシで実行されるカスタムアラートスクリプト、リモートコマンド、およびユーザースクリプトの場合のみ、実行の失敗と見なされます)
  8. この時点で、すべてが完了し、プロセスツリー全体(つまり、プロセスグループまたはジョブ)が終了したと見なされます。

Zabbixは、最初の子プロセスが終了したときにコマンド/スクリプトが処理を完了し、他のプロセスが出力ハンドル/ファイル記述子を開いたままにしていないことを前提としています。処理が完了すると、作成されたすべてのプロセスが終了します。

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

終了コードのチェック

終了コードは以下の条件のときにチェック可能です。

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

失敗したコマンド/スクリプトのフロントエンドメッセージとログエントリ

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

詳細については以下も参照