このページで
9 コマンドの実行
Zabbixは、外部チェック、ユーザーパラメーター、system.runアイテム、カスタムアラートスクリプト、リモートコマンド、およびグローバルスクリプトに共通の機能を使用します。
実行手順
デフォルトでは、Zabbixのすべてのスクリプトはshシェルを使用して実行され、デフォルトのシェルを変更することはできません。別のシェルを利用するには、回避策としてスクリプトファイルを作成し、コマンド実行時にそのスクリプトを呼び出すことができます。
コマンド/スクリプトは、UnixおよびWindowsプラットフォームの両方で同様に実行されます:
- Zabbix(親プロセス)が通信のためのパイプを作成する
- Zabbixが、作成される子プロセスの出力としてパイプを設定する
- Zabbixが子プロセスを作成する(コマンド/スクリプトを実行する)
- 子プロセスのために新しいプロセスグループ(Unixの場合)またはジョブ(Windowsの場合)が作成される
- Zabbixは、タイムアウトが発生するか、他端で誰も書き込んでいない(すべてのハンドル/ファイルディスクリプタが閉じられた)場合までパイプから読み込む。子プロセスがさらにプロセスを作成し、それらが終了またはハンドル/ファイルディスクリプタを閉じる前に終了することがある点に注意してください。
- タイムアウトに達していない場合、Zabbixは最初の子プロセスが終了するかタイムアウトが発生するまで待機する
- 最初の子プロセスが終了し、タイムアウトに達していない場合、Zabbixは最初の子プロセスの終了コードをチェックし、0と比較する(0以外の値は実行失敗と見なされる。これは、ZabbixサーバーおよびZabbixプロキシで実行されるカスタムアラートスクリプト、リモートコマンド、ユーザースクリプトにのみ該当)
- この時点で、すべてが完了したと見なされ、プロセスツリー全体(つまり、プロセスグループまたはジョブ)が終了する
Zabbixは、最初の子プロセスが終了し、かつ他のプロセスが出力ハンドル/ファイルディスクリプタを開いたままにしていない場合に、コマンド/スクリプトの処理が完了したと見なします。処理が完了すると、作成されたすべてのプロセスが終了します。
コマンド内のすべてのダブルクォートとバックスラッシュはバックスラッシュでエスケープされ、コマンドはダブルクォートで囲まれます。
終了コードのチェック
終了コードは以下の条件でチェックされます。
- カスタムアラートスクリプト、リモートコマンド、ZabbixサーバーおよびZabbixプロキシで実行されるユーザースクリプトのみが対象です。
- 0以外の終了コードはすべて実行失敗とみなされます。
- 失敗した実行の標準エラーおよび標準出力の内容は収集され、フロントエンド(実行結果が表示される場所)で利用可能です。
- agent/proxyのLogRemoteCommandsパラメータを有効にすることで、Zabbixエージェント/プロキシで実行されたリモートコマンドの追加ログエントリが作成される場合があります。
失敗したコマンド/スクリプトに対するフロントエンドメッセージおよびログエントリの例:
- 失敗した実行の標準エラーおよび標準出力の内容(存在する場合)。
- "Process exited with code: N."(出力が空で、終了コードが0以外の場合)。
- "Process killed by signal: N."(シグナルによってプロセスが終了した場合、Linuxのみ)。
- "Process terminated unexpectedly."(不明な理由でプロセスが終了した場合)。