2つのファイルの変更を待ちながらスクリプトをデーモンのように実行するにはどうすればよいですか?

2つのファイルの変更を待ちながらスクリプトをデーモンのように実行するにはどうすればよいですか?

私はスクリプトが初めてで、2つのファイルを読み取り、コマンドを実行してログファイルを出力するスクリプトを作成しました。

私はこのスクリプトをデーモンのように実行し、それらのファイルからこれらのコマンドを再実行するためにこれら2つのファイルの変更を待ちたいと思います。

いくつかのinotifyが使用されていることはわかっていますが、それを使用する方法とスクリプトが目的の方法で動作するようにループをどこに配置する必要があるのか​​わかりません。つまり:

  1. ユーザーが初めてスクリプトを実行したとき
  2. スクリプトはこれらのファイルを読み取り、出力ログを生成します。
  3. これら2つのログファイルが変更されるまで(一部の行が追加されます)、スクリプトは「休止」(デーモン化)します。
  4. このファイルに対して同じスクリプトを再実行してください。
  5. もう一度寝て、この2つのファイルの変更を待ちます。

答え1

古いソフトウェアを監視する必要がありますが、ロギングオプションが不十分です。これはまさに望むものではありませんが、役に立ちます。

  • 毎秒2つのファイル比較(ref.cfg合計)cur.cfg
  • cfg.log違いが見つかったらファイルに書き込む
  • 変更が検出されたら、ファイルを比較します。
  • 日付サフィックスを含むファイルのバックアップ

watch_cfg.sh:

#!/bin/bash

cfg_reference="/tmp/ref.cfg"
cfg_current="/tmp/cur.cfg"

while true; 
do 
  cfg1=$(cat $cfg_reference)
  cfg2=$(cat $cfg_current)
  date_current="$(date +"%F_%T")"
  diff_detected=false
  test "$cfg1" = "$cfg2" || diff_detected=true
  if [ "$diff_detected" = true ]; then
    printf "$date_current [cfg] diff detected\n" >> cfg.log
    diff $cfg_reference $ecfg_current > "./cfg_diff/cur.cfg_${date_current}"
    cp -a "$cfg_reference" "./cfg_old/cur.cfg_before_${date_current}"
    cp -a "$cfg_current" "$cfg_reference"
  fi
  sleep 1
done

次のコマンドを実行します。

chmod +x watch_cfg.sh
nohup ./watch_cfg.sh  > /dev/null 2>&1 &

これにより、現在のセッションからプロセスが分離され、バックグラウンドに送信されます。

答え2

この内容が役に立つと思うので、「回答」として投稿します(コメントを残すことができればそうします)。

http://www.nongnu.org/fileschanged/

例4は、あなたがやりたいことに当てはまります。私は長い間それを使ってきて、良い結果を得ました。

./fileschanged -r dir | while read file ; do
  if [ "${file}" == "x" ] ; then
    handle_file_x_script "${file}"
  else if [ "${file}" == "y" ] ; then
    handle_file_y_script "${file}"
  fi
done

答え3

使用できるincroninotifyイベントを聞きます。パッケージはDebian(Ubuntu、...)などのディストリビューションや他のディストリビューションで利用できます。

関連情報