Удаленный монитор изменений файлов

Логика работы
Суть работы,- выборочное копирование файлов с клиента на сервер раз в период с обработкой на сервере. На сервере проверяет изменения между последними двумя передачами. При наличии изменений:
1 записывает в лог какие были изменения
2 отправляет изменения на почту
3 проводит действия с файлами по логике:
          старые файлы переносит в архив с указанием даты
          удаляет старые файлы и копирует на их место новые файлы

Логика работы на клиенте
Раз в период копирует файлы, которые зарегистрированы в  diffclietn.conf, в свой каталог "files". При этом, если там уже есть файлы затирает их.
Изменяет имя файла на полный путь к файлу, заменяя знак "/" на "_". Пример, - файл "rc.local" будет иметь вид "_etc_rc.local"
Скрипт не изменяет исходные файлы и работает только с их копиями
Авторизуется на фтп сервер и копирует файлы по пути "/папка_фтп_пользователя/files"


Установка клиента
yum install ftp

nano /path/diffclietn.sh
#!/bin/sh
HOST="192.168.10.10"
USER="ftptest"
PASSWD="ftptest"

log=lost.inf
echo "Файлы скопированы для проверки">$log

files=( $(cat "diffclient.conf") )
rm -rf files
mkdir files

for((i=0;i<${#files[@]};i++))do
cp ${files[$i]} files/${files[$i]////_}
done
#DEBUG ftp -inv
ftp -inv $HOST << EOF
user $USER $PASSWD

mkdir files
mput files/*
put lost.inf

bye
EOF

chmod +x  diffclietn.sh

Заменить на свои данные
HOST="192.168.10.10"
USER="ftptest"
PASSWD="ftptest"
Создаем конфиг с путями к файлам, которые будем мониторить
nano /path/diffclietn.conf
пример содержания файла
/etc/rc.local
/etc/my.cnf
/etc/php-fpm.d/www.conf
/etc/nginx/nginx.conf
/etc/nginx/conf.d/admin_vhost.conf
/usr/local/etc/raddb/radiusd.conf
/usr/local/etc/raddb/sites-enabled/dhcp
Добавляем исполнение файла в крон
00 07 * * * root /path/diffclient.sh
Настройка фтп на сервере
yum install vsftpd

Обязательно добавить нового пользователя с его папкой на сервере
useradd -d '/var/www/path/to/your/dir' -s /sbin/nologin ftpuser
passwd ftpuser
mkdir -p /var/www/path/to/your/dir
chown -R ftpuser '/var/www/path/to/your/dir'
chmod 775 '/var/www/path/to/your/dir'
groupadd ftpusers
usermod -G ftpusers ftpuser

Автозапуск фтп
chkconfig --levels 235 vsftpd on
service vsftpd start

Проверяем 
локально
ftp localhost
Вывод :
Trying 127.0.0.1...
Connected to localhost (127.0.0.1).
220 (vsFTPd 2.2.2)
Name (localhost:root): ftpuser
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
***
удаленно 
ftp your.ftp.server.com
Вывод :
Connected to your.ftp.server.com.
220 (vsFTPd 2.2.2)
Name (your.ftp.server.com:yourname):
Name (localhost:root): ftpuser
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
***
Установка сервера

nano  /path/diffserver/diffserver.sh
#!/bin/sh
log=diffserver.log
mail=mail@gmail.com

DATE=`date +%F`

files=( $(cat "diffserver.conf") )

set $(wc -l $log);LOGSTART=$1
let "LOGSTART=LOGSTART+1"                                  
echo -e "\n" "  `date +%F`">>$log                          
for((i=0;i<${#files[@]};i++))do                            
DIR=${files[i]}                                            
echo "   $DIR">>$log                                      
                                                           
if !([ -d "$DIR" ])then                                    
echo "$DIR Родительский каталог не найден!">>$log
else
if !([ -d "$DIR/files.old" ])then
if !([ -d "$DIR/files" ])then
echo "$DIR/files Каталог для проверки не найден!">>$log
else
echo "$DIR/files.old  Каталог не создан. Создание каталога и копирование файлов">>$log
mkdir $DIR/files.old
cp  $DIR/files/* $DIR/files.old
fi
else
#Сверка последнего копирования клиента
if !([ -f $DIR/lost.inf ])then
echo "$DIR/lost.inf не найден. Создание файла">>$log
echo "Создан сервером">$DIR/lost.inf
fi
INF=( $(cat "$DIR/lost.inf") )
if ([ ${INF[0]} = "Проверен" ])
then
echo "$DIR не обновлялся с последней проверки">>$log
else
echo "Проверен">$DIR/lost.inf
#Сверка каталогов
if diff -r $DIR/files $DIR/files.old >> $log; then
echo "Каталоги совпадают">> $log
else
echo "Есть отличия">> $log
#Переносим файлы
tar -czvf $DIR/$DATE.tar.gz $DIR/files.old
rm -rf $DIR/files.old
mkdir files.old
cp  $DIR/files/* $DIR/files.old

#Почта
set $(wc -l $log);LOGEND=$1"p"
(echo "Subject:$DIR Отличия в конфигурации"; sed -n  $LOGSTART,$LOGEND $log;) | sendmail -F "Differ" $mail.

fi
fi
fi
fi
done.............................

#Log in terminal
set $(wc -l $log);LOGEND=$1"p"
sed -n  $LOGSTART,$LOGEND $log

chmod +x  diffserver.sh

Заменить на свою почту
mail=mail@gmail.com
Создаем конфиг с путями к папкам фтп клиентов, которых будем мониторить
nano /path/diffserver/diffserver.conf
пример содержания файла
/var/www/klient1
/var/www/klient2
/var/www/klient3
Добавляем исполнение файла в крон
30 07 * * * root /path/diffserver/diffserver.sh







Комментарии

Популярные сообщения из этого блога

mikbill расшифровка завершений сессий

Accel-ppp команды

Zabbix agent установка и настройка