nixp.ru v3.0

27 мая 2017,
суббота,
07:15:33 MSK

DevOps с компанией «Флант»
Anarchist написал 30 сентября 2008 года в 10:40 (678 просмотров) Ведет себя как мужчина; открыл 258 тем в форуме, оставил 4097 комментариев на сайте.

Есть такой, увы, далеко не безупречный с точки зрения функциональности и к тому же брошенный проект, как sma.

Подбирать его пока не берусь, но пользоваться-то нужно.

Вот и пришлось сочинить скриптик для формирования и ротации отчётов.

Конфиг sma.conf следующий

Comment            "Sendmail Log Analysis Report"
HostName            mydomain.ru
OutFile         /usr/local/www/vhosts/statistics/sendmail_stat/report.html
...


(в остальном конфиг совершенно стандартный)

Желаемое получаем посредством скрипта следующего содержания

#!/bin/sh
#
#
ARCHIVE="/var/log/maillog.0.bz2"
MAILLOG="/var/log/maillog.0"
STAT_DIR="/usr/local/www/vhosts/statistics/sendmail_stat"
HTML_INDEX="$STAT_DIR/index.html"
REPORT="$STAT_DIR/report.html"
REPORTS_LIMIT=64
REPORT_NAME=`head -n 1 $STAT_DIR/admin.tmp`
#
bunzip2 -kv $ARCHIVE
#
/usr/local/bin/sma -f /usr/local/etc/sma.conf $MAILLOG
mv -f $REPORT $STAT_DIR/$REPORT_NAME
rm -f $MAILLOG
FILES=`ls $STAT_DIR/sendmail* | wc -l`
if [ "$FILES" -gt "$REPORTS_LIMIT" ]
then
        DELETE=`expr $FILES - $REPORTS_LIMIT`
        CLEAR=`ls -r1 $STAT_DIR/sendmail* | tail -n $DELETE`
        for TEMP in $CLEAR
        do
                rm -f $TEMP
        done
fi
echo "sendmail_`date "+%Y-%m-%d"`.html" > $STAT_DIR/admin.tmp
echo "


<html>
<body>
» > $HTML_INDEX

echo »
» >> $HTML_INDEX

echo »

echo » » >> $HTML_INDEX

echo » » >> $HTML_INDEX

echo «</head>» >> $HTML_INDEX

echo »
» >> $HTML_INDEX

echo »
<center>» >> $HTML_INDEX

echo »» >> $HTML_INDEX

echo »

Страница выбора периода</p>» >> $HTML_INDEX

echo »

» >> $HTML_INDEX

echo »

» >> $HTML_INDEX

cd $STAT_DIR

for FILE in `ls -r1 sendmail*`

do

DATE=`echo $FILE | sed s/.html//`

URL=`echo $FILE | sed s/\\\/usr\\\/local\\\/www\\\/vhosts\\\/statistics//`

echo »Статистика sendmail за $DATE.</a>

» >> $HTML_INDEX

done

echo «</center>» >> $HTML_INDEX

echo «</body>» >> $HTML_INDEX

echo «</html>» >> $HTML_INDEX

exit 0
</center>

Если бы кто подсказал (не могу позволить себе роскошь развлекаться с второстепенными задачами) какпреобразовать дату к привычному формату DD-MM-YYYY — был бы премного благодарен.
</body>
</html>

Дмитрий Шурупов
Anarchist
Если бы кто подсказал (не могу позволить себе роскошь развлекаться с второстепенными задачами) какпреобразовать дату к привычному формату DD-MM-YYYY — был бы премного благодарен.

Тут же все написано:

echo "sendmail_`date "+%Y-%m-%d"`.html" > $STAT_DIR/admin.tmp

Поправить формат для date на нужный.

Anarchist
Dmitry Shurupov
Тут же все написано:

echo "sendmail_`date "+%Y-%m-%d"`.html" > $STAT_DIR/admin.tmp

Поправить формат для date на нужный.

Предлагаешь писать в временный файл две строки: с именем файла (формат выбран исходя из логики сортировки ls’ом) и с датой, выводимой в индекса?

Неспортивное решение :)

Anarchist

Но самое главное: Шуруп, предлагаемый тобой путь решает проблему с именем последнего отчёта, но не с преобразованием имён файлов (содержащих дату в формате, обеспечивающем корректную сортировку) в имена отчётов, содержащие дату в привычном и оптимальном с точки зрения восприятия формате (ибо в временный файл пишется только дата последнего отчёта).

И, кстати, надо бы не полениться подумать на предмет отказа от этого файла…