0byte — Мониторинг FTP-сервера (новый взгляд)
FTP сервер на десктопе
Возникла необходимость на обычной рабочей машине поднять ftp-сервер. Наряду с этим появился и интерес, что именно качают пользователи с моего ftp. Конечно, Вы скажите unix-way tail -f /var/log/blablablaftplog. Но я пошел другим путем...
Напоминаю что данный метод оправдывает себя только на десктопной машине (с исками и гномом в часности), для серверной машины подойдет и unix-way.
Набор софта
Все это собиралось, тестировалось, и теперь прекрасно
Нам понадобится:
- pure-ftpd - для организации сервера FTP
- libnotify - по умолчанию должна быть в любом гноме
- python 2.5 и выше
- PyNotify - сборка libnotify для питона
Приступим
Ставим софт:
(у меня так)
sudo apt-get install pure-ftp libnotify pynotify
останавливаем фтп сервер
sudo /etc/init.d/pure-ftpd stop
открываем зупскающий скрипт
sudo vim /etc/init.d/pure-ftpd
(Нас интересует только анонимный ftp сервер)
все косим что в нем и пишем следующий код
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
#! /bin/sh NAME=/etc/init.d/pure-ftpd PATH=/sbin:/bin:/usr/sbin:/usr/bin RUN_STRING="pure-ftpd -4 -A -B -M -e -U 022:022 -O /var/log/pure-ftpd/transfer.log" KILL_STRING=pure-ftpd case "$1" in start) echo -n "Starting anonymous FTP server ... " eval $RUN_STRING echo [OK] ;; stop) echo -n "Stopping anonymous FTP server ... " killall $KILL_STRING echo [OK] ;; *) echo "Usage: $NAME {start|stop|restart|force-reload}" >&2 exit 1 ;; esac exit 0 |
добавляем в систему пользователя ftp
sudo useradd ftp
в качестве домашнего каталога указываем ему тот, который будет открыт анонимоусам при входе на сервер.
теперь стартуем сервер
sudo /etc/init.d/pure-ftpd start
теперь у нас полноценный анонимный ftp сервер
Пишем систему мониторинга
файл notify.py (выбрасывает уведомление в правом нижнем углу с теском котрый ему передали в качестве аргументов)
например "python notify.py WeLinux" вобщем понятно.. вот код файла.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
import pynotify from sys import argv arg_str = "" for arg in argv[1:]: arg_str = arg_str + " " + arg pynotify.init("PyNotify") n = pynotify.Notification("PyNotify", "%s" % arg_str, "gtk.STOCK_INFO") n.set_urgency(pynotify.URGENCY_NORMAL) n.set_timeout(5000) # n.set_timeout(pynotify.EXPIRES_NEVER) n.show() |
теперь напишем непосредственно следилку. (файл ftp-monitor.sh)
это шел скрипт, который каждые 10 сек, проверяет не обновился ли лог, и если обновился выбрасывает notification
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
#!/bin/sh # # monitoring ftp server # DELAY=10 LOG=/var/log/pure-ftpd/transfer.log row=`tail -1 $LOG` while true do sleep $DELAY new_row=`tail -1 $LOG` if [ "$row" != "$new_row" ] then python notify.py $new_row; row=$new_row; fi done |
осталось все запустить:
sudo ./ftp-monitor.sh > /dev/null &
и как только кто то что то качает я вижу такое сообщение: