Controlar as alterações do diretório diário (e enviá-las por e-mail)

3

Eu tenho um servidor NAS baseado em Debian (ReadyNAS) com uma hierarquia de arquivos profunda. Eu gostaria de ser notificado diariamente sobre o que mudou em alguns de seus diretórios e seus subdiretórios.

Portanto, se alguém excluir acidentalmente um arquivo durante o dia, eu serei notificado sobre ele à noite por e-mail (o que conteria o resumo de todas as alterações) e restaurarei o arquivo do backup na manhã do dia seguinte.

No começo, eu queria escrever um script PHP CL ou Python que examinasse recursivamente os diretórios, mas depois pensei que talvez houvesse alguma ferramenta unix que melhorasse. Algo como dircmp:)

Como você faria isso?

Obrigado

    
por Dae 30.11.2011 / 23:26

3 respostas

1

Execute o tripwire como um trabalho noturno.

Como alternativa, coloque todo o sistema sob controle de versão. Execute o comando diff da ferramenta de controle de versão para ver as alterações e seu comando revert (no entanto, é chamado) para reverter quaisquer alterações na cópia local. Observe que a maioria dos sistemas de controle de versão manipula o conteúdo do arquivo, mas exige trabalho extra para metadados, como permissões.

Como alternativa, use um sistema de armazenamento com alguma forma de suporte a snapshot, como LVM ou máquinas virtuais.

Como alternativa, por que não evitar todas as alterações?

    
por 01.12.2011 / 01:10
1

Você pode escrever um script que faça algo assim (não testado, desculpe) e colocá-lo em um 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 

Ou você pode usar apenas meu produto , o que torna esse tipo de coisa realmente fácil. :)

[não existe mais esse produto, desculpe]

    
por 09.09.2013 / 22:45
0

Com o BTRFS, você pode montar um sistema de arquivos instantâneo ao vivo, no qual todos os arquivos alterados são 'armazenados'.

    
por 30.03.2012 / 16:48