URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID8
Нить номер: 6802
[ Назад ]

Исходное сообщение
"Мониторинг (на стороне сервера) ФТП на наличие новых файлов"

Отправлено alexkv , 31-Мрт-10 13:05 
Гуру!
Помогите советом, ткните меня в какую сторону копать.

Есть хостинг с CPanel.
Есть папка publicftp, в ней для каждого пользователя своя папка.
Пользователь может залить в эту свою папку файл, я могу забрать этот файл. Могу пользователю в его папку кинуть какой-то другой файл.

Так вот сейчас я совсем не знаю когда пользователь залил что-то для меня.
Мне приходится постоянно залазить в publicftp и проверять кто что в свою папку закинул.

Как сделать мониторинг на наличие новых файлов с уведомлением например по почте?

Понимаю что можно ФТП клиент зашедулить на проверку.
Но интересует именно мониторинг на стороне сервера. И чтобы этот мониторинг уведомлял о появлении новых файлов.

И еще один непонятный для меня вопрос: когда пользователь начал заливать файл - я законнектился к ФТП и вижу файл. НО! Пользователь еще заливает его, при обновлении папки размер файла увеличивается. Так вот хотелось бы получать уведомление именно когда файл полностью успешно загружен, а не когда он появился и еще закачивается.

Заранее спасибо за любую помощь и советы, подсказки.


Содержание

Сообщения в этом обсуждении
"Мониторинг (на стороне сервера) ФТП на наличие новых файлов"
Отправлено Karmael , 31-Мрт-10 15:54 
Хм, повесить на крон нечто подобное :

root#crontab -e
#ну раз в сколько минут чекать думаю сам решишь
*/10 * * * * * /root/ftp_check.sh

root#vim /root/ftp_check.sh
#!/bin/bash

mail мне@любимому.ru -s "new ftp files for last 10 minuts" < `find /home/ftp -cnewer /root/check.pid`
rm /root/check.pid
touch /root/check.pid

вуаля. единственное что, нужно сделать /root/check.pid первый раз руками для нормальной работы ;) наслаждайтесь.


"Мониторинг (на стороне сервера) ФТП на наличие новых файлов"
Отправлено alexkv , 31-Мрт-10 16:07 
>[оверквотинг удален]
>root#vim /root/ftp_check.sh
>#!/bin/bash
>
>mail мне@любимому.ru -s "new ftp files for last 10 minuts" < `find
>/home/ftp -cnewer /root/check.pid`
>rm /root/check.pid
>touch /root/check.pid
>
>вуаля. единственное что, нужно сделать /root/check.pid первый раз руками для нормальной работы
>;) наслаждайтесь.

Спасибо большое.
Вот только я совсем забыл сказать - хостинг у меня шаред.
Нет у меня там консоли (root#) :(
Хостинг буржуйский. Вроде где-то мелькало что они по допзапросу с какими-то дополнительными подтверждениями личности дают ssh, но не уверен.
Я конечно сегодня посмотрю еще, но сомневаюсь :(



"Мониторинг (на стороне сервера) ФТП на наличие новых файлов"
Отправлено Karmael , 31-Мрт-10 16:14 

>
>Спасибо большое.
>Вот только я совсем забыл сказать - хостинг у меня шаред.
>Нет у меня там консоли (root#) :(
>Хостинг буржуйский. Вроде где-то мелькало что они по допзапросу с какими-то дополнительными
>подтверждениями личности дают ssh, но не уверен.
>Я конечно сегодня посмотрю еще, но сомневаюсь :(

на крон все вешают по запросу - но на самом деле должно быть и в панели управления хостингом - просто обязан быть crontab :)
иначе никак, не получиться проверять раз в сколько то минут.
в общем по логике задачи - все довольно просто, вы перенаправляете почтовому клиенту результат работы find который ищет от определенной папки _вглубь_ все файлы что новей файла check.pid. потом файл удаляется и создается новый (чтобы было от куда отсчет делать, ибо он по крону будет создаваться раз в 10 минут)

посмотрите что можно сделать на вашем хостинге.


"Мониторинг (на стороне сервера) ФТП на наличие новых файлов"
Отправлено alexkv , 31-Мрт-10 16:25 
>[оверквотинг удален]
>быть и в панели управления хостингом - просто обязан быть crontab
>:)
>иначе никак, не получиться проверять раз в сколько то минут.
>в общем по логике задачи - все довольно просто, вы перенаправляете почтовому
>клиенту результат работы find который ищет от определенной папки _вглубь_ все
>файлы что новей файла check.pid. потом файл удаляется и создается новый
>(чтобы было от куда отсчет делать, ибо он по крону будет
>создаваться раз в 10 минут)
>
>посмотрите что можно сделать на вашем хостинге.

Все понял. СПАСИБО!!!
Сегодня вечером дома буду пробовать реализовать такое.
А отслеживать именно окончание загрузки наверное сложно. Это уже наверное надо логи ФТП сервера разбирать.
И получается пока файл качается при каждой проверке эта система будет "срабатывать"? Ведь в процессе закачки файла его дата или время меняются? Или я что-то путаю?
Начали закачивать файл на ФТП. Система установила ему некую дату/время создания. Потом в процессе закачки эти дата/время будут меняться? Или поменяются только по окончании загрузки?
Этот вопрос интересует, т.к. файлы могут быть и большими, закачиваться и 2, и 4, 10 часов.


"Мониторинг (на стороне сервера) ФТП на наличие новых файлов"
Отправлено Karmael , 31-Мрт-10 16:35 
>Этот вопрос интересует, т.к. файлы могут быть и большими, закачиваться и 2,
>и 4, 10 часов.

Все гораздо проще )))

мы создаем файл. check.pid у него есть дата и время создания.
find <откуда ищем> -cnewer check.pid будет искать файлы от <откуда ищем> СТАРШЕ чем файл check.pid
т.е. все файлы которые были созданы после того как был создан файл check.pid


вот я тут в консольке покажу как это работает:

akleev@ws147:~/scripts$ rm test.pid
rm: удалить защищенный от записи пустой обычный файл `test.pid'? y
akleev@ws147:~/scripts$ touch test.pid
akleev@ws147:~/scripts$ find . -cnewer test.pid
#вот тут он ничего не нашел т.к. это самый новый файл в текущей директории
#ниже я создаю файлы тупым touch, и они будут старше чем check.pid
akleev@ws147:~/scripts$ touch 1.txt
akleev@ws147:~/scripts$ touch 2.txt
akleev@ws147:~/scripts$ touch 3.txt
#ниже запускаем поиск еще раз
akleev@ws147:~/scripts$ find . -cnewer test.pid
.
./3.txt
./1.txt
./2.txt
akleev@ws147:~/scripts$

вуаля.

Это самый простой метод, т.к. паристь логи, имхо ваще не целесообразно и долго.
find причем умеет искать в поддиректориях, что дает нам такую возможность как искать все новые файлы начиная прямо от /home (я просто не знаю как у вас настроен ftp, но обычно делают /home/<username>/ftp или как то так)


"Мониторинг (на стороне сервера) ФТП на наличие новых файлов"
Отправлено alexkv , 31-Мрт-10 17:18 
2 Karmael
Спасибо вам огромное за помощь и внимание к моему вопросу.
Когда получаешь такие ответы - возвращается вера в людей ;)
Сегодня вечером буду пробовать. Надеюсь все получится, но если что - наберусь наглости и обращусь еще :)

"Мониторинг (на стороне сервера) ФТП на наличие новых файлов"
Отправлено Karmael , 31-Мрт-10 17:25 
>2 Karmael
>Спасибо вам огромное за помощь и внимание к моему вопросу.
>Когда получаешь такие ответы - возвращается вера в людей ;)
>Сегодня вечером буду пробовать. Надеюсь все получится, но если что - наберусь
>наглости и обращусь еще :)

Да не вопрос, обращайтесь =) людям помогать нужно =)


"Мониторинг (на стороне сервера) ФТП на наличие новых файлов"
Отправлено Karmael , 31-Мрт-10 19:30 
>2 Karmael
>Спасибо вам огромное за помощь и внимание к моему вопросу.
>Когда получаешь такие ответы - возвращается вера в людей ;)
>Сегодня вечером буду пробовать. Надеюсь все получится, но если что - наберусь
>наглости и обращусь еще :)

А да, надо бы еще проверочку сделать, чтоб не отсылал пустые письма.
что то типа :
#=========================ftp_check.sh===================================================
#!/bin/bash
# Задаем переменные:
# в этой переменной храниться путь к пид файлу:
pid_file="/root/check.pid"
# а вот в этой _результат_ выполнения комманды:
ftp_file_list=`find /home/ftp -cnewer $pid_file`

#проверяем не пусто ли в переменной:
if [ $ftp_file_list -eq "" ] then
#если пусто, то пересоздаем pid file, и выходим
rm $pid_file
touch $pid_file
exit 5
#если что то есть, отправляем на почту и пересоздаем pid:
    else
        mail мне@любимому.ru -s "New files for last 10 minuts" < echo "$ftp_file_list"
        rm $pid_file
        touch $pid_file
fi
#==========================end of ftp_check.sh===========================================

на самом деле настоятельно рекомендую прочитать тут же на опеннете статью "искусство написания bash скриптов" - там куча примеров, и в частности есть ну очень схожие задачи.
по крайней мере добавить себе в закладки на будущее :)


"Мониторинг (на стороне сервера) ФТП на наличие новых файлов"
Отправлено cuad0 , 02-Апр-10 16:49 
>что то типа :

Можно укоротить:


#!/usr/local/bin/bash

file_list=`find . -newermt "10 min ago"`

if [ -n "$file_list" ] then
mail email@addr.com -s "new files" < echo $file_list
fi

пути только свои у find-а поставьте, либо вынесите их в переменные, если так больше нравится.

rm-ать файл, а потом его touch-ить не надо. Если файл не существует, touch его создаст, иначе обновит время модификации и посл. доступа у файла.


"Мониторинг (на стороне сервера) ФТП на наличие новых файлов"
Отправлено yyy , 21-Апр-10 11:41 
>[оверквотинг удален]
>fi
>
>

>
>пути только свои у find-а поставьте, либо вынесите их в переменные, если
>так больше нравится.
>
>rm-ать файл, а потом его touch-ить не надо. Если файл не существует,
>touch его создаст, иначе обновит время модификации и посл. доступа у
>файла.


"Мониторинг (на стороне сервера) ФТП на наличие новых файлов"
Отправлено rrr , 21-Апр-10 11:42 
>[оверквотинг удален]
>>fi
>>
>>
>>
>>пути только свои у find-а поставьте, либо вынесите их в переменные, если
>>так больше нравится.
>>
>>rm-ать файл, а потом его touch-ить не надо. Если файл не существует,
>>touch его создаст, иначе обновит время модификации и посл. доступа у
>>файла.