Концепции монитора изменений файлов

Концепция


Лог клиента (сделано, логика изменена)
В клиенте генерируется файл лога "diff.inf" в папке с файлами и переносится вместе со всеми файлами. В него заносится лог копирования файлов фтп. Сервер по этому файлу будет определять время создания файлов и сравнивать с временем создания файла "diff.inf" в папке "files.old". По разнице времени определять было ли изменение между двумя проверками на сервере и сообщать об этом в лог.
Изменение логики повторной проверки
При подключении клиент создает файл "lost.inf" в своей папке на клиенте и на сервере с текстом "Файлы скопированы для проверки". Сервер при проверке смотрит на запись и если значение не равно "Проверен" изменяет запись на "Проверен" и начинает проверку. В противном случае проверки не будет с соответствующей записью в логе.
Добавлена проверка если файла нет, его создает сервер.

Изменено
Названия файлов
configer.sh>diffclient.sh
configer.conf>diffclient.conf
diff.sh>diffserver.sh
diff.conf>diffserver.conf
diff.log>diffserver.log



Изменение логики в связи с проблемами передачи по фтп файлов с разных директорий в свою на сервере.
Добавляем папку files. Туда будут складываться копии файлов с измененными именами (полный путь, знак "/" заменяем на "_")


На клиенте имеется два файла (или один) с путями к файлам и исполняющая часть. 
На клиенте нужен фтп клиент 
yum install ftp
Конфиг
nano configer.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

Исполняющая часть
nano configer.sh 
chmod +x configer.sh

запуск из крона раз в сутки
configer.sh
шапка с переменными и учетные данные фтп
#!/bin/sh
HOST="192.168.10.13"
#PORT="21"
USER="ftptest"
PASSWD="ftptest"
#FILE="/home/fold/test"
#UFILE="test"
#DATE=`date +%F`
загоняет пути файлов в массив 
files=( $(cat "configer.conf") )

#files2=( "${files[@]////_}" )

копируем файлы в папку files
for((i=0;i<${#files[@]};i++))
do
cp ${files[$i]} files/${files[$i]////_}
done.



логинится на сервер по фтп
ftp -inv $HOST << EOF
user $USER $PASSWD
 отправляет в свою папку файлы
#put ${files[0]} data/${files[0]////_} mput files/*

закрывает соединение
bye
EOF

полный текст configer.sh
#!/bin/sh
HOST="192.168.10.13"
USER="ftptest"
PASSWD="ftptest"

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

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


СЕРВЕРНАЯ ЧАСТЬ
два файла логика diff.sh и файл с зарегистрированными клиентами diff.conf
diff.conf хранит пути к клиентским папкам
diff.sh
раз в период сравнивает файлы files/ c files.old/

загоняем пути к папкам в массив
files=( $(cat "diff.conf") )

если $files/files пустой
если не пустой
если $files/files.old пустой
записываем новый конфиг
если не пустой
сравниваем $files/files и $files/files.old

часть про проверку каталогов
#Проверяем каталоги
DIR=0
FILE=${files[0]}
#Каталог клиента
if  [ -d $FILE ]
then
let "DIR+=1"
fi
#Каталог files
if  [ -d "$FILE/files" ]
then
let "DIR+=2"
fi
#Каталог files.old
if  [ -d "$FILE/files.old" ]
then
let "DIR+=4"
fi
echo $DIR

case $DIR in
0) echo "$FILE НЕТ КАТАЛОГА";;
3) ;;
7) echo "fgh";;
esac

diff.sh
##!/bin/sh
log=diff.log
files=( $(cat "diff.conf") )
DIR=${files[0]}
echo -e "\n" "Проверка $DIR `date +%F`">>$log


if  !([ -d "$DIR/files.old" ])
then
echo "$DIR/files.old  Нет каталога для проверки. Создание каталога">>$log
mkdir $DIR/files.old
cp  $DIR/files/* $DIR/files.old
else
#Проверяем каталоги
if diff -r $DIR/files $DIR/files.old >> $log; then
echo "ОК">> $log
else
echo "Не совпадают">> $log
fi
fi

Почта
echo «qwe» |mail olegvilkovsky@gmail.com
ошибка
send-mail: fatal: parameter inet_interfaces: no local interface found
/etc/postfix/main.cf
вместо этого inet_interfaces = localhost, пропиши 127.0.0.1

inet_protocols = all 
заменить на
inet_protocols = ipv4

mail не зработал
возможно помогло
postfix -n
service postfix start
echo "sfdf"| sendmail -v "erfefer" mail@gmail.com -заработал
mail -s "$DIR Отличия в конфигурации" $mail

traceroute -n -T -p 25 alt4.gmail-smtp-in.l.google.com

netstat -an | grep 25

lsof -Pni | grep LIST | grep ":25"
Смотрим очередь postfix
mailq

Читаем письмо из очереди
postcat -q ID

Количество писем
find /var/spool/postfix/{deferred,active,maildrop,incoming}/ -type f | wc -l

Очищаем очередь postfix
postsuper -d ALL


смотри порт на котором работает postfix
netstat -lnpt | grep master

еще настройки /etc/postfix/master.cf
smtps     inet  n       -       -       -       -       smtpd
  -o smtpd_tls_wrappermode=yes
  -o smtpd_sasl_auth_enable=yes
это передача по 465 и 587 портам
exim
находится в /etc/exim

Отключаем ipv6
В конфигурационном файле /etc/exim4/exim4.conf.template, вначале перед секциейbegin acl надо вписать:
disable_ipv6 = true


Комментарии

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

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

Accel-ppp команды

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