web-dev-qa-db-ja.com

Systemdサービスでファイルを監視する

私は、ubuntuサーバーで実行されているサービスによって定期的に書き込まれるファイルを持っています。現在、タイマーで実行されている別のサービスがあり、書き込まれたファイルの前の状態からの変更をチェックし、変更が行われた場合はmysqlデータベーステーブルを更新します。タイマーが作動するのを待つのではなく、ファイルに変更が加えられたときにすぐに通知できるようなサービスをセットアップしたいのですが、systemdを使用してファイル監視を設定する方法はわかりません。

5
Alex

このためのsystemdメカニズムはpath unitで、監視するファイルにPathChangedまたはPathModified設定。ライターがファイルに書き込む方法によって異なります。

ファイル全体を書き込み、そのたびに閉じる場合、PathChangedPathModifiedの落とし穴を回避します。これは、全体としての変更が複数の書き込みで一部のみを書き込む場合、時期尚早にアクティブ化される可能性があります。ファイルの。ただし、その一方で、ファイルが書き込み用に開かれただけで実際には書き込まれなかった場合でも、PathChangedはトリガーされる可能性があります。

パス単位には、関連するサービス単位と同じ名前を付けるか、Unit設定を使用します。この関連するサービス単位はもちろん、ファイルの内容をデータベースに転送するサービスであり、余分なタイマーは不要です。ファイルに関連する変更が発生すると、パスユニットによりサービスユニットがアクティブになります(まだアクティブになっていない場合)。これは、いわゆるパスのアクティブ化です。

参考文献

  • Lennart Poettering et al。 (2017)。 systemd.unit 。 systemdのマニュアルページ。 freedesktop.org。
  • Lennart Poettering et al。 (2017)。 systemd.path 。 systemdのマニュアルページ。 freedesktop.org。
4
JdeBP