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 &

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

おすすめ記事