Eu tive que monitorar um software antigo, que não tem opções de log suficientes. Não é exatamente o que você quer, mas pode ajudá-lo.
- compara 2 arquivos (
ref.cfg
ecur.cfg
) a cada segundo - registra no arquivo
cfg.log
se um diff for detectado - faz um diff em um arquivo se uma alteração for detectada
- faz um backup do arquivo com o sufixo de data
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
Execute os comandos:
chmod +x watch_cfg.sh
nohup ./watch_cfg.sh > /dev/null 2>&1 &
Isso desanexa o processo da sessão atual e o envia para o segundo plano.