Гуру!
Помогите советом, ткните меня в какую сторону копать.Есть хостинг с CPanel.
Есть папка publicftp, в ней для каждого пользователя своя папка.
Пользователь может залить в эту свою папку файл, я могу забрать этот файл. Могу пользователю в его папку кинуть какой-то другой файл.Так вот сейчас я совсем не знаю когда пользователь залил что-то для меня.
Мне приходится постоянно залазить в publicftp и проверять кто что в свою папку закинул.Как сделать мониторинг на наличие новых файлов с уведомлением например по почте?
Понимаю что можно ФТП клиент зашедулить на проверку.
Но интересует именно мониторинг на стороне сервера. И чтобы этот мониторинг уведомлял о появлении новых файлов.И еще один непонятный для меня вопрос: когда пользователь начал заливать файл - я законнектился к ФТП и вижу файл. НО! Пользователь еще заливает его, при обновлении папки размер файла увеличивается. Так вот хотелось бы получать уведомление именно когда файл полностью успешно загружен, а не когда он появился и еще закачивается.
Заранее спасибо за любую помощь и советы, подсказки.
Хм, повесить на крон нечто подобное :root#crontab -e
#ну раз в сколько минут чекать думаю сам решишь
*/10 * * * * * /root/ftp_check.shroot#vim /root/ftp_check.sh
#!/bin/bashmail мне@любимому.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#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, но не уверен.
Я конечно сегодня посмотрю еще, но сомневаюсь :(
>
>Спасибо большое.
>Вот только я совсем забыл сказать - хостинг у меня шаред.
>Нет у меня там консоли (root#) :(
>Хостинг буржуйский. Вроде где-то мелькало что они по допзапросу с какими-то дополнительными
>подтверждениями личности дают ssh, но не уверен.
>Я конечно сегодня посмотрю еще, но сомневаюсь :(на крон все вешают по запросу - но на самом деле должно быть и в панели управления хостингом - просто обязан быть crontab :)
иначе никак, не получиться проверять раз в сколько то минут.
в общем по логике задачи - все довольно просто, вы перенаправляете почтовому клиенту результат работы find который ищет от определенной папки _вглубь_ все файлы что новей файла check.pid. потом файл удаляется и создается новый (чтобы было от куда отсчет делать, ибо он по крону будет создаваться раз в 10 минут)посмотрите что можно сделать на вашем хостинге.
>[оверквотинг удален]
>быть и в панели управления хостингом - просто обязан быть crontab
>:)
>иначе никак, не получиться проверять раз в сколько то минут.
>в общем по логике задачи - все довольно просто, вы перенаправляете почтовому
>клиенту результат работы find который ищет от определенной папки _вглубь_ все
>файлы что новей файла check.pid. потом файл удаляется и создается новый
>(чтобы было от куда отсчет делать, ибо он по крону будет
>создаваться раз в 10 минут)
>
>посмотрите что можно сделать на вашем хостинге.Все понял. СПАСИБО!!!
Сегодня вечером дома буду пробовать реализовать такое.
А отслеживать именно окончание загрузки наверное сложно. Это уже наверное надо логи ФТП сервера разбирать.
И получается пока файл качается при каждой проверке эта система будет "срабатывать"? Ведь в процессе закачки файла его дата или время меняются? Или я что-то путаю?
Начали закачивать файл на ФТП. Система установила ему некую дату/время создания. Потом в процессе закачки эти дата/время будут меняться? Или поменяются только по окончании загрузки?
Этот вопрос интересует, т.к. файлы могут быть и большими, закачиваться и 2, и 4, 10 часов.
>Этот вопрос интересует, т.к. файлы могут быть и большими, закачиваться и 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 или как то так)
2 Karmael
Спасибо вам огромное за помощь и внимание к моему вопросу.
Когда получаешь такие ответы - возвращается вера в людей ;)
Сегодня вечером буду пробовать. Надеюсь все получится, но если что - наберусь наглости и обращусь еще :)
>2 Karmael
>Спасибо вам огромное за помощь и внимание к моему вопросу.
>Когда получаешь такие ответы - возвращается вера в людей ;)
>Сегодня вечером буду пробовать. Надеюсь все получится, но если что - наберусь
>наглости и обращусь еще :)Да не вопрос, обращайтесь =) людям помогать нужно =)
>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 скриптов" - там куча примеров, и в частности есть ну очень схожие задачи.
по крайней мере добавить себе в закладки на будущее :)
>что то типа :Можно укоротить:
#!/usr/local/bin/bashfile_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 его создаст, иначе обновит время модификации и посл. доступа у файла.
>[оверквотинг удален]
>fi
>
>
>[оверквотинг удален]
>>fi
>>
>>
>>
>>пути только свои у find-а поставьте, либо вынесите их в переменные, если
>>так больше нравится.
>>
>>rm-ать файл, а потом его touch-ить не надо. Если файл не существует,
>>touch его создаст, иначе обновит время модификации и посл. доступа у
>>файла.