Концепции монитора изменений файлов
Концепция
Лог клиента (сделано, логика изменена)
В клиенте генерируется файл лога "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
chmod +x configer.sh
#files2=( "${files[@]////_}" )
копируем файлы в папку files
for((i=0;i<${#files[@]};i++))
do
cp ${files[$i]} files/${files[$i]////_}
done.
логинится на сервер по фтп
#put ${files[0]} data/${files[0]////_} mput files/*
закрывает соединение
полный текст 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
загоняем пути к папкам в массив
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
netstat -an | grep 25
Читаем письмо из очереди
postcat -q ID
Количество писем
find /var/spool/postfix/{deferred,active,maildrop,incoming}/ -type f | wc -l
Очищаем очередь postfix
postsuper -d ALL
exim
находится в /etc/exim
Отключаем ipv6
В конфигурационном файле /etc/exim4/exim4.conf.template, вначале перед секциейbegin acl надо вписать:
Лог клиента (сделано, логика изменена)
В клиенте генерируется файл лога "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. Туда будут складываться копии файлов с измененными именами (полный путь, знак "/" заменяем на "_")
Добавляем папку 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
запуск из крона раз в сутки
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
вместо этого 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
traceroute -n -T -p 25 alt4.gmail-smtp-in.l.google.com
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 портам-o smtpd_tls_wrappermode=yes
-o smtpd_sasl_auth_enable=yes
exim
находится в /etc/exim
Отключаем ipv6
В конфигурационном файле /etc/exim4/exim4.conf.template, вначале перед секциейbegin acl надо вписать:
disable_ipv6 = true
Комментарии
Отправить комментарий