毎日のディレクトリの変更を追跡し、電子メールで送信します。

毎日のディレクトリの変更を追跡し、電子メールで送信します。

私は非常に深いファイル階層を持つDebianベースのNASサーバー(ReadyNAS)を持っています。いくつかのディレクトリとサブディレクトリで行われた変更について毎日通知を受けたいと思います。

したがって、誰かが日中に誤ってファイルを削除した場合は、夜に電子メール通知(すべての変更の概要を含む)を受け取り、翌朝のバックアップからファイルを復元します。

最初はディレクトリを再帰的に検索するためにPHP CLまたはPythonスクリプトを書くことを考えましたが、より良い作業を実行できる素晴らしいUnixツールがあると思いました。 dirmpのようなもの:)

あなたは何をしますか?

ありがとう

答え1

走る引き継ぎ鉄線夜勤で。

または、システム全体をバージョン管理に入れます。バージョン管理ツールのdiffコマンドを実行して変更を確認し、その元に戻すコマンド(名前に関係なく)を実行して、ローカルコピーの変更を元に戻します。ほとんどのバージョン管理システムはファイルの内容を処理しますが、メタデータ(権限など)の追加操作が必要です。

または、LVMや仮想マシンなど、特定の種類のスナップショットをサポートするストレージシステムを使用してください。

それとも、最初からすべての変更をブロックするのはどうですか?

答え2

次のタスク(テストされていない、申し訳ありません)を実行するスクリプトを作成してcrontabに配置できます。

#!/bin/bash

# whom to mail
mailto="[email protected]"

# what directory to look in
dir="/somewhere/else"

# make the directory safer to embed in filenames
dirname=$(echo $dir | tr "/" "-" | tail -c +2)

# today's date, add hours & minutes if you want to run it more often
today=$(date +"%Y%m%d")

# yesterday's date
yesterday=$(date -d -1day +"%Y%m%d")

# filenames
todayfile=$dirname-$today.files.bz2
yesterdayfile=$dirname-$yesterday.files.bz2

# the business. Use find -printf if you want to capture additional metadata.
find $dir |sort |bzip2 > $todayfile

if [ -r $yesterdayfile ]; then
    bzdiff $yesterdayfile $todayfile | mail $mailto -s "Directory differences for $dir from $yesterday to $today" 
else
    echo "No file listing from $yesterday, can't produce report | mail $mailto -s "Unable to report directory differences for $dir, no report from $yesterday"
fi 

またはそれだけで行うことができます。私の製品を試してくださいこれはこの種の仕事を非常に簡単にします。 :)

【こんな商品はもうありません。申し訳ありません]

答え3

BTRFSを使用すると、変更されたすべてのファイルが「保存」されるライブスナップショットファイルシステムをインストールできます。

関連情報