viewtopic.php?p=27654#p27654У нас для параллельного отслеживания изменений в файлах имеется скрипт на шелле, который после апдейта перемещает новые файлы биллинга в отдельную папку и накатывает из бэкапа старые файлы. В третьей папке лежат файлы с последнего апдейта, чтобы можно было сделать diff оригинальных файлов и внести соответствующие изменения в свои.
Я не мастер писать sh-скрипты, поэтому
корректная работа скрипта на вашей машине не гарантируется.
Код:
#!/bin/sh
CHANGETRACKING_DIR=/usr/local/bgchangetracking/
BGBILLING_PATH=/usr/local/BGBillingServer/
echo "backup"
tar -cvzf ~/bgbilling.gz . --exclude={archive,kladr,log}
/etc/init.d/bgbilling stop
/etc/init.d/bgdataloader stop
/etc/init.d/bgscheduler stop
#обновляем биллинг и пишем лог апдейта в update.log
/usr/local/BGBillingServer/bg_installer.sh update | tee update.log
echo "clear $CHANGETRACKING_DIR./new/"
#удаляем все файлы в $CHANGETRACKING_DIR'new/', директории оставляем
find $CHANGETRACKING_DIR'new/' -type f -exec rm -rf {} +;
echo "restore replaced files"
#для каждого из файлов, замененных при апдейте...
for i in $(cat update.log | awk 'BEGIN {f=0} {if(f==1)print $0; if($0~/REPLACED FILES/)f=1;}'); do
relative=`echo "$i" | awk -F "$BGBILLING_PATH" '{print $NF}'`
fname=`echo "$i" | awk -F "/" '{ print $NF }'`
dname=`dirname $i`
backup=`ls -l --time-style="long-iso" $dname | grep "$fname\.bak\." | sort -r -k 6,7 | awk 'BEGIN {f=0} {if(f==0)print $8;if(f==0)f=1;}'`
relativedir=`dirname $relative`
#...копируем новые родные файлы в $CHANGETRACKING_DIR'new/'
mkdir -p $CHANGETRACKING_DIR'new/'$relativedir
cp $i $CHANGETRACKING_DIR'new/'$relative
#...накатываем обратно последний бэкап
cp $dname/$backup $i
done
echo "starting services"
/etc/init.d/bgbilling start
/etc/init.d/bgdataloader start
/etc/init.d/bgscheduler start
mv update.log update.log.`date +%Y%m%d%H%M%s`
Затем ручками делаю diff:
Код:
diff -r /usr/local/bgchangetracking/
Смотрю изменения, вношу их и заливаю в current новые файлы:
Код:
cp -r /usr/local/bgchangetracking/new/* /usr/local/bgchangetracking/current/