Задача (пример бредовый, но демонстрирует приёмы построения приложений):
Необходимо по заявке через веб-страницу отправлять журнал за указанный день в e-mail сообщении.
Я прекрасно понимаю что это можно сделать миллионом способов но наш будет совсем оригинальным.
Для исполнения нам потребуется:
1. Веб сервер Apache
2. Модуль logalarm
3. sendmail или аналог.
4. Модули grep,awk,и т.п.
**кроме модуля logalarm все можно найти почти в любой поставке OS Linux.
Для начала разработаем HTML форму для запроса журналов.
Фаил request.html:
<form action="http://myspace.ru/getlog.html" method="get">
Адрес электронной почты:<input name="email" type="text">
Дата журнала[yyyy-mm]:<input name="logdate" type="text">
<input value="Запросить" type="submith">
</form>
Так же создадим фаил getlog.html можно там написать что-то типа "Ваш запрос принят...", а можно оставить пустым.
Далее переходим к части получения запроса.
Этот запрос будет очень хорошо виден в файле access.log сервера apache. (обычно он находится по пути /var/log/apache2/access.log)
чтоб не путать эти запросы с другими мы их отсортируем при помощи grep
# tail -f /var/log/apache2/access.log |grep getlog.html
При запросе нашей формы в файле access.log мы видим строку запроса:
192.168.0.176 - - [24/Sep/2008:19:43:08 +0400] "GET /getlog.html?email=aaa@bbb.ccc&logdate=2008-01 HTTP/1.1" 304 ...
далее осталось только выбрать интересующие нас значения:email и logdate и отправить их в logalarm
# tail -f /var/log/apache2/access.log |grep getlog.html |awk '{print $7}'|awk 'BEGIN {FS="&"} {print substr($1,20)" " substr($2,9)}' | logalarm 'send.sh $(log)s'
Тут возможно все написать в одну строку но я написал вызов модуля отправки через send.sh где сделаю cat файлу pattern_$2.log и отправлю его по адресу $1
Вот собственно и все enjoy!

Комментариев нет:
Отправить комментарий