現在位置: ホーム / みらくるブログ / HAP2プラグインを構成するプロセスの関係性

HAP2プラグインを構成するプロセスの関係性

前回の記事ではHAP2のプラグインは、基本的に4つのプロセスから構成されることを紹介しました。本稿ではそれらの親子関係とクラッシュ時の自動普及について説明します。

概要

前回の記事( HAP2プラグインのベースライブラリ動作概要)ではHAP2プラグインを構成する4つのプロセスについて説明しました。それらは、下の図に示す親子関係を形成しています。

HAP2プラグインプロセスの親子関係

psコマンドなどでプロセス一覧を取得しても、どのプロセスもコマンド名はpythonなので、どのプロセスがどの役割に対応しているかが直感的にわかりにくいのですが、上記の図を元にPPIDなども合わせれば、ある程度特定ができます。

4つのプロセスは同一のプロセスグループに属します。また、例えば、2つ以上のhap2_zabbix_api.pyを起動した場合でも、それぞれのプロセスグループIDはユニークになります。

プラグインの自動復旧

hap2_starter.pyは、Hatoholサーバがローカルマシンでプラグインを実行するために使用されているスクリプトです。このスクリプトは、起動したプラグイン(上記の図ではhap2_zabbix_api.pyのBaseMainPlugin)が終了した場合、自動的にプラグインの再起動を行います。プラグインのクラッシュが発生しても自動で復旧するためです。デフォルトの再起動までの待ち時間は10秒です。(※16.04では、この時間は固定で変更できません)

また、再起動の前に当該プロセスグループのすべてのプロセスを終了させます。クラッシュの仕方によっては、いくつかのプロセスが残る場合があるためです。

hap2_starter.pyは、前述のようにHatoholサーバからの使用を前提に作成されたという経緯はありますが、ユーザーが手動でプラグインを起動するケースで、かつ、自動復旧を望む場合に利用するのも便利でしょう。

BaseMainPluginの自動復旧への関わり

図から分かるようにBaseMainPluginも子プロセスを持っています。いずれかの子プロセスが終了した場合、UNIXシグナル(SIGCHLD)が、BaseMainPluginに通知されるので、それを契機に、BaseMainPluginは、実行コンテキスト上でPythonの例外を発生させます。この例外を補足されることなく、そのままプロセスが終了することになります。すると上述したようにhap2_starter.pyがそれを検出して残っているプロセスを終了させます。

まとめ

HAP2プラグインを構成するプロセスの関係を説明しました。いずれかのプロセスが予期せずクラッシュしても、すべてのプロセスが一旦終了し、再起動される仕組みが備えられていることが分かったかと思います。