フォルダ監視機能について

コメント

1件のコメント

  • 正式なコメント
    Ichiro Takahashi

    フィックスポイントの高橋です。

    特定のフォルダに対して常駐監視を行い、ファイルの追加が行われた際にジョブを実行できる機能

    こちらのお問い合わせですが、前半部分については「サーバ上のファイルシステムの特定のフォルダを監視」したいと理解しました。

    まず、Kompira Enterprise 自身に「サーバ上のフォルダを監視する」という直接的な機能はございません。

    よって、外部のツールなどと連携した実現方法を検討することになります。ディレクトリを監視するツールとしては「fswatch」や「inotify-tools」などが考えられます。

    外部のツールと連携したシンプルな例を以下に示しますので、参考になさってみてください。

    対応方針

    ここでは簡単のために、以下のような方針で検討します。

    • Kompiraサーバ上の既存のフォルダを監視する。
    • 「fswatch」を利用して特定のディレクトリへのファイルの追加を監視する。
    • ファイルの検出したら kompira_sendevt コマンドで追加されたパス名を、Kompira に事前に用意した「チャネル」に対してメッセージ通知する。
    • 通知を受けた「チャネル」が事前に用意したジョブフローを実行する。(そのために、チャネルにアクションジョブフローの設定を事前に行っておく)

    準備 (fswatch のインストール)

    Kompiraサーバに fswatch をインストールします(特権ユーザで実行してください)。

    yum install fswatch

    ジョブフローの作成

    通知を受けたときに実行されるジョブフローを作成します。ここではパラメータとして通知されたメッセージを受け取って、その内容を表示するだけの以下のようなジョブフローを例えば「/root/action_job」として作成します。

    |message|
    print(message)

    チャネルの作成

    kompira_sendevt によるメッセージを受信するためのチャネルオブジェクトを例えば「/root/monitor_chan」として作成します。このとき、以下のような設定を行なって保存します。

    • アクション種別:「ジョブフローを実行する」を選択する
    • アクションターゲット:上で作成したジョブフロー「/root/action_job」を選択する

    補足:このように設定しておくことで、このチャネルにメッセージが到着したときに、そのメッセージをパラメータとしてアクションターゲットで指定したジョブフローが実行されるようになります。

    fswatch の実行

    fswatch をインストールした Kompira サーバ上で fswatch を実行します。このとき以下のような動作を考えます。

    • 「/var/log」ディレクトリへのファイル作成 (Created) を監視する
    • ファイル作成を検出したら、そのパスを上で作成したチャネルにメッセージを通知する

    この場合、fswatch コマンドと kompira_sendevt コマンドを組み合わせて、Kompira サーバ上で以下のように実行してみてください。

    fswatch --event Created /var/log/ | while read path; do
        /opt/kompira/bin/kompira_sendevt --channel="/root/monitor_chan" path="$path";
    done

    fswatch コマンドが /var/log/ ディレクトリを監視してファイルの作成 (Created) を検出するとそのパスを標準出力に表示します。それを受け取って kompira_sendevt コマンドで作成しておいたチャネル /root/monitor_chan にメッセージを送信します(という動作を繰り返します)。

    動作確認

    上記を済ませて fswatch を実行した状態で、Kompira サーバ上の監視対象ディレクトリにファイルを作成してみます。

    touch /var/log/test-newfile

    正常に連携できれば、Kompira にメッセージが送信されて、ジョブフロー「/root/action_job」が実行されているはずです。プロセス一覧で履歴を確認してみてください。以下のような出力がなされているのが確認できるかと思います。

    {'path': '/var/log/test-newfile'}
    コメントアクション パーマリンク

サインインしてコメントを残してください。