私はスクリプトが初めてで、2つのファイルを読み取り、コマンドを実行してログファイルを出力するスクリプトを作成しました。
私はこのスクリプトをデーモンのように実行し、それらのファイルからこれらのコマンドを再実行するためにこれら2つのファイルの変更を待ちたいと思います。
いくつかのinotifyが使用されていることはわかっていますが、それを使用する方法とスクリプトが目的の方法で動作するようにループをどこに配置する必要があるのかわかりません。つまり:
- ユーザーが初めてスクリプトを実行したとき
- スクリプトはこれらのファイルを読み取り、出力ログを生成します。
- これら2つのログファイルが変更されるまで(一部の行が追加されます)、スクリプトは「休止」(デーモン化)します。
- このファイルに対して同じスクリプトを再実行してください。
- もう一度寝て、この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
使用できるincron
inotifyイベントを聞きます。パッケージはDebian(Ubuntu、...)などのディストリビューションや他のディストリビューションで利用できます。