Несколько слов об этой серии статей
Типичный администратор UNIX® имеет свой привычный набор утилит и приемов. Эти утилиты, последовательности командных строк и скрипты используются для упрощения различных процессов. Некоторые из этих инструментальных средств поставляются вместе с операционной системой, но знание большинства приемов приходит с опытом работы и желанием системных администраторов облегчить себе жизнь. Этот цикл статей посвящен эффективному использованию лучших инструментальных средств разных вариантов UNIX, в том числе упрощению процесса администрирования в гетерогенной среде.
Журналы различных почтовых сервисов содержат большое количество полезной информации, однако то, какая именно это информация, зависит от конкретной почтовой системы (sendmail, postfix, qmail и др.). В любом случае из журналов можно почерпнуть такие сведения:
- Количество писем и частота их обработки
- Частота обработки писем по каждому пользователю
- Узлы и домены, больше других отправляющие и принимающие почту
- Статистика по фильтрации спама и почтовых вирусов
Анализ журналов проливает свет на характер работы с почтой в вашей сети. Разбор журналов - сам по себе трудоемкий процесс, а результат сильно зависит от того, в каком формате ведутся журналы и насколько этот формат сложен для текстового разбора. Ниже представлена выдержка из журнала почтовой программы postfix, где видно, что запись об одном и том же сообщении занимает несколько строк (см. Листинг 1).
Листинг 1. Выдержка из журнала postfix
Nov 17 03:17:34 narcissus postfix/smtpd[14281]: connect from localhost[127.0.0.1]
Nov 17 03:17:34 narcissus postfix/smtpd[14281]: 4F4CB1109404:
client=localhost[127.0.0.1]
Nov 17 03:17:34 narcissus postfix/cleanup[14278]: 4F4CB1109404:
message-id=<Pine.SOC.4.64.0711162015280.16833@logical.logical-approach.com>
Nov 17 03:17:34 narcissus postfix/qmgr[104]: 4F4CB1109404:
from=<zfs-discuss-bounces@opensolaris.org>, size=7632, nrcpt=1 (queue active)
Nov 17 03:17:34 narcissus postfix/smtpd[14281]: disconnect from localhost[127.0.0.1]
Nov 17 03:17:34 narcissus postfix/smtp[14279]: DBA5B11093FD:
to=<dev@gendarme.example.com>, relay=127.0.0.1[127.0.0.1], delay=11,
status=sent (250 2.6.0 Ok, i
d=08640-07, from MTA([127.0.0.1]:10025): 250 Ok: queued as 4F4CB1109404)
Nov 17 03:17:34 narcissus postfix/qmgr[104]: DBA5B11093FD: removed
Nov 17 03:17:34 narcissus postfix/pipe[14283]: 4F4CB1109404:
to=<dev@gendarme.example.com>, relay=cyrus, delay=0,
status=sent (gendarme.example.com)
Nov 17 03:17:34 narcissus postfix/qmgr[104]: 4F4CB1109404: removed
Nov 17 03:20:07 narcissus postfix/smtpd[14355]:
connect from narcissus.example.com[192.168.0.110]
Nov 17 03:20:07 narcissus postfix/smtpd[14355]:
disconnect from narcissus.example.com[192.168.0.110]
Nov 17 03:20:07 narcissus postfix/smtpd[14355]:
connect from narcissus.example.com[192.168.0.110]
Nov 17 03:20:07 narcissus postfix/smtpd[14355]:
disconnect from narcissus.example.com[192.168.0.110]
Nov 17 03:23:16 narcissus postfix/smtpd[14410]:
connect from f048226119.adsl.alicedsl.de[78.48.226.119]
Nov 17 03:23:17 narcissus postfix/smtpd[14410]: 6CAAE1109461:
client=f048226119.adsl.alicedsl.de[78.48.226.119]
Nov 17 03:23:17 narcissus postfix/cleanup[14411]: 6CAAE1109461:
message-id=<000901c828c9$037c1e48$b9cc3eb7@ggpxddd>
Nov 17 03:23:17 narcissus postfix/qmgr[104]: 6CAAE1109461:
from=<maxwell@research.nokia.com>, size=2051, nrcpt=1 (queue active)
Nov 17 03:23:18 narcissus postfix/smtpd[14410]:
disconnect from f048226119.adsl.alicedsl.de[78.48.226.119]
Nov 17 03:23:30 narcissus postfix/smtpd[14414]: connect from localhost[127.0.0.1]
Nov 17 03:23:30 narcissus postfix/smtpd[14414]:
62E941109473: client=localhost[127.0.0.1]
Nov 17 03:23:30 narcissus postfix/cleanup[14411]: 62E941109473:
message-id=<000901c828c9$037c1e48$b9cc3eb7@ggpxddd>
Nov 17 03:23:30 narcissus postfix/qmgr[104]: 62E941109473:
from=<>, size=3220, nrcpt=1 (queue active)
Nov 17 03:23:30 narcissus postfix/smtpd[14414]:
disconnect from localhost[127.0.0.1]
|
К счастью, каждое сообщение имеет уникальный номер, поэтому все сведения о нем можно легко получить путем фильтрации. Для примера в Листинге 2 показаны строки, соответствующие сообщению с уникальным номером 4F4CB1109404, из которых уже легко извлечь нужную дополнительную информацию.
Листинг 2. Извлечение сведений об обработке отдельно взятого письма
Nov 17 03:17:34 narcissus postfix/smtpd[14281]: 4F4CB1109404:
client=localhost[127.0.0.1]
Nov 17 03:17:34 narcissus postfix/cleanup[14278]: 4F4CB1109404:
message-id=<Pine.SOC.4.64.0711162015280.16833@logical.logical-approach.com>
Nov 17 03:17:34 narcissus postfix/qmgr[104]: 4F4CB1109404:
from=<zfs-discuss-bounces@opensolaris.org>, size=7632, nrcpt=1 (queue active)
Nov 17 03:17:34 narcissus postfix/pipe[14283]: 4F4CB1109404:
to=<dev@gendarme.example.com>, relay=cyrus, delay=0, status=sent
(gendarme.example.com)
Nov 17 03:17:34 narcissus postfix/qmgr[104]: 4F4CB1109404: removed
|
Из этого фрагмента становятся ясны следующие важные свойства письма:
- Дата и время прихода
- Отправитель
- Получатель
- Размер сообщения
- Порядковый номер сообщения
Проанализировав содержимое журнала, можно собрать интересную статистику на основе вышеуказанных параметров и понять, как именно используется почта.
Извлечение сведений из журнала
Прежде всего нам необходимо однозначно идентифицировать каждое письмо. Это возможно благодаря тому, что сервис postfix сопоставляет с каждым письмом уникальный идентификатор и отображает его вместе с информацией о письме в журнале. Например, в следующей строке:
Nov 17 03:17:34 narcissus postfix/pipe[14283]: 4F4CB1109404: to=<dev@gendarme.example.com>, \ relay=cyrus, delay=0, status=sent (gendarme.example.com) |
идентификатор письма равен 4F4CB1109404; адрес получателя определяется из той же строки. Адрес отправителя находится в другой строке с тем же идентификатором письма:
Nov 17 03:17:34 narcissus postfix/qmgr[104]: 4F4CB1109404: from=\ <zfs-discuss-bounces@opensolaris.org>, size=7632, nrcpt=1 (queue active) |
Сведения о разных письмах обычно перемешаны, поскольку почтовый сервис принимает множество писем одновременно, а разные этапы обработки фиксируются в журнале по мере завершения независимо друг от друга.
Из приведенной выше строки журнала видно, что размер сообщения равен 7632 байтам, а количество получателей равно 1.
В Листинге 3 приведен Perl-скрипт, который получает на вход содержимое журнала, извлекает из него нужную информацию и выдает итоговую статистику о количестве писем различного размера.
Листинг 3. Сбор полезной статистики на основе журнала
#!/usr/bin/perl
#
# Скрипт для извлечения статистики о письмах из журнала
# Для считывания времени в формате epoch мы используем
# модуль Time::ParseDate, а затем - DateTime для
# преобразования еще раз
use Time::ParseDate;
use DateTime;
# Используем файл, указанный в параметрах в командной строке
open(MAIL,$ARGV[0]) or die "Не удается открыть $ARGV[0]: $!\n";
# Объявляем структуру для хранения статистики
my $mails = {};
# Сканируем входной файл строка за строкой
while(<MAIL>)
{
chomp;
my $mailid = 0;
# Ищем 12-разрядный идентификатор письма в шестнадцатеричном формате
if (m/: ([A-Z0-9]{12}):/)
{
$mailid = $1;
}
# Извлекаем дату и преобразуем ее в формат epoch
if (m/(\S+ \d+ \d{2}:\d{2}:\d{2}) .*? $mailid/)
{
$mails->{$mailid}->{date} = parsedate($1);
}
# Извлекаем адрес отправителя и размер письма
if (m/$mailid: from=<(.*?)>, size=(\d+),/)
{
$mails->{$mailid}->{from} = $1;
$mails->{$mailid}->{size} = $2;
}
# Извлекаем получателя
if (m/$mailid: to=<(.*?)>/)
{
$mails->{$mailid}->{to} = $1;
}
}
close(MAIL);
# На основе собранной информации формируем
# статистику в итоговой структуре
my $mailstats = {};
foreach my $mailid (keys %{$mails})
{
# Не создавать итоговую запись, если недостаточно информации
# (т.е. поле отправителя или получателя пусто)
if (!defined($mails->{$mailid}->{to}) ||
!defined($mails->{$mailid}->{from}) ||
$mails->{$mailid}->{to} !~ m/[a-z]/ ||
$mails->{$mailid}->{from} !~ m/[a-z]/)
{
next;
}
# Подсчитываем количество писем для каждого получателя
$mailstats->{$mails->{$mailid}->{to}}->{count}++;
# Суммируем размеры писем для каждого получателя
$mailstats->{$mails->{$mailid}->{to}}->{size} +=
$mails->{$mailid}->{size};
# Подсчитываем количество писем от каждого отправителя
$mailstats->{$mails->{$mailid}->{from}}->{count}++;
# Суммируем размеры писем от каждого отправителя
$mailstats->{$mails->{$mailid}->{from}}->{size} +=
$mails->{$mailid}->{size};
# Суммируем ту же информацию, но в зависимости от даты
if (defined($mails->{$mailid}->{date}))
{
my $dt = DateTime->from_epoch(
epoch => $mails->{$mailid}->{date})->ymd('');
my $mailto = $mails->{$mailid}->{to};
my $mailfrom = $mails->{$mailid}->{from};
$mailstats->{$mailto}->{_date}->{$dt}->{count}++;
$mailstats->{$mailto}->{_date}->{$dt}->{size} +=
$mails->{$mailid}->{size};
$mailstats->{$mailfrom}->{_date}->{$dt}->{count}++;
$mailstats->{$mailfrom}->{_date}->{$dt}->{size} +=
$mails->{$mailid}->{size};
}
}
# Выводим информацию о количестве и размере писем в зависимости от адреса
foreach my $address (sort keys %{$mailstats})
{
# Выводим информацию о письмах, в которых упоминается локальный адрес
if ($address =~ m/@.*example\.com$/)
{
printf('%-40s %5d %9d',
$address,
$mailstats->{$address}->{count},
$mailstats->{$address}->{size});
print("\n");
}
}
|
В Листинге 4 показан результат работы этого скрипта после обработке некого почтового журнала - приведена статистика количества и размеров писем для данного домена. На самом деле можно получить гораздо больше информации, чем приведено в данном примере. Нетрудно собрать аналогичную статистику, но уже в зависимости от дня, что прольет свет на число писем, обрабатываемых каждый день, и поможет оценить нагрузку на почтовый сервер.
Листинг 4. Полученная статистика
023649@gendarme.example.com 5 8922
admin@gendarme.example.com 5 13141
answersquad@gendarme.example.com 50 348712
buy@gendarme.example.com 79 806097
buy@example.com 2 2911
dev@gendarme.example.com 165 1010980
dev@example.com 8 94430
finance@gendarme.example.com 4 14493
flummox@gendarme.example.com 203 858775
klhxs@example.com 4 8080
dj@gendarme.example.com 96 703754
dj@example.com 2 2063
mcwhoever@gendarme.example.com 7 137185
mlists@gendarme.example.com 38 473165
play@gendarme.example.com 26 155220
postmaster@gendarme.example.com 5 15561
fhf@gendarme.example.com 101 836863
fhffilter@gendarme.example.com 14 225081
spam@gendarme.example.com 49 349750
tmbg-org-dj@gendarme.example.com 16 126144
ybxmbjw@gendarme.example.com 1 1342
|
Можно заметить, что некоторым пользователям приходит относительно много почты, в то время как другим - совсем мало.
После изучения этой статистики возникает вопрос, рационально ли используют почту сотрудники, имеющие большой почтовый трафик.
Если вашу почтовую систему обслуживает единственный сервер, который не справляется с нагрузкой, то разумно предоставить отдельный сервер для обслуживания нескольких клиентов с большим трафиком, а остальных "безобидных" пользователей перевести на второй сервер. При такой схеме нагрузка будет эффективно распределена.
Теперь, имея информацию о "жадных до почты" клиентах, предлагаю поподробнее узнать, каким образом у них организовано хранение почты.
Форматы хранения почтовых ящиков
Одним из наиболее результативных методов контроля за работой почты является анализ почтовых ящиков пользователей и отдельных сообщений, хранящихся в них. Метод спорный, так как для некоторых пользователей такой контроль выглядит как стороннее вмешательство. Также многие убеждены, что то, каким образом они хранят и архивируют почту, - их личное дело.
Если отбросить эмоции, становится понятно, что детальные сведения о почтовых ящиках помогают улучшить производительность, стратегии резервного копирования почты и планирование ресурсов, поскольку выясняется, на какие части системы приходится наибольшая нагрузка.
По правде говоря, смотреть содержимое пользовательских сообщений - идея не из лучших, и без этого можно легко обойтись с помощью нехитрых действий, которые позволят выудить много ценных сведений, не присматриваясь к отдельным письмам. Однако не забывайте - то, какие именно это будут сведения, зависит от конкретной используемой почтовой системы.
Большинство почтовых систем работают по протоколу IMAP (Internet Mail Access Protocol, Интернет-протокол доступа к почте), при котором все сообщения хранятся на сервере, а клиенты имеют доступ к письмам через почтовые папки. Плюсом данного протокола является возможность доступа к одним и тем же данным со стороны разных клиентов. Упрощается резервное копирование почты, а пользователь всегда имеет доступ к сообщениям – будь то из офиса или из отеля во время поездки.
За хранение почтовых сообщений отвечает внутренняя база данных IMAP-сервера. Чаще всего встречаются два способа хранения: в одном файле либо в почтовой директории (Maildir). Первый способ предполагает хранение всех сообщений в одиночном файле (бывает, что имеется файл на каждую папку). Такой способ имеет явные недостатки, которые особенно проявляются в системе с множеством клиентов, - это и проблемы блокировки файла, и ухудшение производительности при работе с одним огромным файлом.
Лучший вариант - формат Maildir, при котором почтовые папки представлены каталогами файловой системы, а сообщения хранятся в отдельных файлах, что дает быстрый и эффективный доступ.
Однако оба способа хранения сталкиваются с трудностями при очень большом количестве сообщений. В случае одиночного файла возникает опасность нарушения структуры файла. При использовании Maildir некоторые файловые системы плохо справляются с большим количеством файлов в одном каталоге. Это ограничение файловой системы, а не почтового сервера, но об этом нужно помнить.
Проанализировав отчет об использовании почты, можно сделать вывод о необходимости установки нового сервера или о том, что некоторым пользователям не помешает реорганизовать свою почту для улучшения общей производительности сервера.
Получение общей статистики использования почты
Одним из самых простых способов понять, как организована почта пользователей, является запуск утилиты проверки занимаемого места на диске. Станет ясно, какие пользователи накапливают большие объемы почты, создавая значительный вклад в нагрузку на сервер, и таким образом требуют внимания.
В примерах ниже используется почтовый сервер Cyrus IMAP, который хранит почту в формате Maildir. Тем не менее многие базовые принципы верны и для случаев хранения в одиночном файле. В Листинге 5 показан простой отчет о занимаемом дисковом пространстве для нескольких пользователей.
Листинг 5. Получение статистики о занимаемом дисковом пространстве
$ du -sk *
20 admin
1020 appleby
45828 applicants
13264 buy
11704 dev
11200 finance
52 gordon
25720 mc
472 mcantrip
4340 mlists
120952 myeling
12 nutshell
1812 play
1104 postmaster
1468 quarantine
36 questions
78940 fhf
4156 fhfarc
2444 spam
|
Если вы хотите ввести почтовые квоты, то полезным будет сравнить цифры, полученные на этом этапе, со значением системных квот (глобальных или на каждого пользователя), и организовать для пользователей некое предупреждение. Имейте в виду, что квоты всего лишь ограничивают пользователя в занимаемом им дисковом пространстве, но не помогут вам более эффективно организовать почту или использование диска.
Команда find поможет проанализировать более детально, насколько рационально клиенты используют возможность хранения сообщений в почтовых папках. Например, имея хранилище Maildir, выведем отчет о занимаемом дисковом пространстве для всех каталогов и подкаталогов. find перечислит каталоги, а sort отсортирует данные по имени. Результат приведен в Листинге 6 (вывод слегка сокращен для большей наглядности).
Листинг 6. Получение статистики занимаемого дискового пространства для всех каталогов и подкаталогов
$ find . -type d -exec du -sk {} \; |sort -t. +1
...
45828 ./applicants
1964 ./brady
616 ./brady/Article Comments
1304 ./brady/Editors
...
11200 ./finance
4160 ./finance/Banking
12 ./finance/Insurance
1192 ./finance/Other
5476 ./finance/Rewards
296 ./finance/Surveys
...
78940 ./sandra
...
460 ./sandra/Nutshell
3444 ./sandra/Orders
1484 ./sandra/SANDRA-general
40920 ./sandra/Sent Mail
1264 ./sandra/Tracey
1984 ./sandra/eBay
...
|
По результатам проверки остановимся на трех пользователях. applicants хранит всю почту в одной папке, в то время как finance для удобства распределяет свои сообщения по разным папкам. sandra, кажется, тоже разумно распределяет почту, однако ее папка отправленных писем достигла внушительных размеров.
Пользователям applicants и sandra не помешает дать дельный совет о том, как лучше организовать хранение почты. Но возможно ли им еще как-либо помочь?
Существует множество решений для автоматизации архивирования и хранения почты. Некоторые из них работают на стороне клиента, некоторые являются частью почтового сервера. Например, в состав сервера Cyrus IMAP входит система Sieve (см. Ресурсы), которая фильтрует письма в момент их поступления в почтовый ящик пользователя.
Указанная программа помогает при работе с вновь поступающими сообщениями, однако существующие письма придется "разгребать" вручную. На помощь приходит скрипт, который подключается к ящику как обычный почтовый клиент, а затем реорганизует и фильтрует почту согласно встроенным в него правилам.
В Листинге 7 приведен Perl-скрипт для сортировки почты, соединяющийся с сервером как почтовый клиент. В этом примере скрипт создает в каждой исходной папке дерево подпапок, в котором каждому году соответствует своя папка, внутри которой, в свою очередь, имеются папки каждого месяца, и каждое письмо попадает в нужную папку согласно дате.
Листинг 7. Автоматическое распределение сообщений по папкам на основе даты
#! /usr/bin/perl
# Скрипт сортирует почту исходя из даты
use Mail::IMAPClient;
use Date::Parse;
use Data::Dumper;
use strict;
use warnings;
# IMAP-сервер
my $Server = 'imap.example.com';
# Почтовый ящик, который мы хотим обработать
my $INBOX = "Sent-Mail";
# Устанавливаем соединение с сервером
my $IMAP = Mail::IMAPClient -> new (Server => $Server,
User => 'user',
Password => 'password',);
# Выбираем нужный почтовый ящик
$IMAP->select($INBOX) or die "Не удалось выбрать $INBOX";
# Мы хотим обработать каждое сообщение, поэтому
# получаем список идентификаторов всех сообщений
my @msgids = $IMAP->search("ALL");
# Ничего не делать, если список пуст
exit(0) if (scalar @msgids == 0);
# Сканируем тело сообщения и находим значения
# полей От, Кому, Тема и др.
my $parsed = $IMAP->parse_headers(
$IMAP->Range(\@msgids),
"From",
"To",
"CC",
"Subject",
"Date",
);
# Объявляем несколько счетчиков сообщений
my $toprocess = scalar @msgids;
my $processed = 0;
my $counter = 0;
# Обрабатываем каждое сообщение
foreach my $msgid (keys %{$parsed})
{
$processed++;
# Извлекаем дату, а затем создаем для каждой папки
# набор вложенных каталогов. Набор будет группировать
# письма вначале по годам, а затем по месяцам
my ($ss,$mm,$hh,$day,$month,$year,$zone) =
strptime($parsed->{$msgid}->{Date}->[0]);
# Если первая дата не определена, пытаемся взять другую дату
if (!defined($year))
{
($ss,$mm,$hh,$day,$month,$year,$zone) =
strptime($parsed->{$msgid}->{Date}->[1]);
}
# Если не можем найти год, принимаем 2004
if (!defined($year))
{
$year = 2004;
}
# Делаем несколько предположений относительно года.
# Если вдруг дата содержит две цифры, то имеем либо
# 2000 год и больше, либо 1990+
$year += 2000 if ($year <10);
$year += 1900 if (($year >90) && ($year <= 200));
$year = 2004 if $year <= 1990;
$month += 1;
# Формируем набор каталогов для создания
my $destfolder = sprintf('%s/%s/%02d',$INBOX,$year,$month);
# Сохраняем все сообщения
my $Message = $IMAP -> message_string($msgid);
# Пытаемся выбрать целевой каталог, либо
# создаем его в случае неудачи
my $selectstat = $IMAP->select($destfolder);
unless ($selectstat)
{
$IMAP->create($destfolder);
}
# Возвращаемся к исходной папке, чтобы правильно
# выбрать сообщение при следующей итерации
$IMAP->select($INBOX);
# Помещаем исходное сообщение в новый каталог
my $AppendStatus = $IMAP -> append_string($destfolder,$Message);
# После копирования сообщения оно получает статус
# непрочитанное. Поэтому читаем все
# сообщения в каталоге для придания им статуса
# прочитанных
$IMAP->select($destfolder);
my @unseenMIDs = $IMAP->unseen();
foreach my $MID (@unseenMIDs)
{
$IMAP->message_string($MID);
}
# Возвращаемся в исходную папку и удаляем сообщение
# в случае его успешного копирования
$IMAP->select($INBOX);
if ($AppendStatus)
{
$IMAP -> delete_message($msgid);
}
$counter++;
}
# Выводим итоговую информацию о проделанной работе
printf("Обработано %5d из %5d сообщений\r",$counter,$toprocess);
# Не забываем физически удалить сообщения, помеченные
# как удаленные, а затем разрываем соединение
$IMAP->expunge();
$IMAP->disconnect();
|
Перед запуском скрипта вам придется указать в нем логин и пароль к учетной записи нужного пользователя, но несложно переделать скрипт таким образом, чтобы его запускал по необходимости сам пользователь, передавая пароль в командной строке.
Стоит обработать с помощью данного скрипта некую папку, например Sent Mail, и она сразу приобретает более удобный вид, что показано в Листинге 8.
Листинг 8. Структура отсортированной почтовой папки выглядит куда лучше
28932 ./martin/Sent Mail
15288 ./martin/Sent Mail/2006
416 ./martin/Sent Mail/2006/03
812 ./martin/Sent Mail/2006/04
684 ./martin/Sent Mail/2006/05
2068 ./martin/Sent Mail/2006/06
2576 ./martin/Sent Mail/2006/07
772 ./martin/Sent Mail/2006/08
708 ./martin/Sent Mail/2006/09
1104 ./martin/Sent Mail/2006/10
3308 ./martin/Sent Mail/2006/11
2840 ./martin/Sent Mail/2006/12
13632 ./martin/Sent Mail/2007
908 ./martin/Sent Mail/2007/01
884 ./martin/Sent Mail/2007/02
1596 ./martin/Sent Mail/2007/03
864 ./martin/Sent Mail/2007/04
1532 ./martin/Sent Mail/2007/05
1448 ./martin/Sent Mail/2007/06
1116 ./martin/Sent Mail/2007/07
2092 ./martin/Sent Mail/2007/08
2220 ./martin/Sent Mail/2007/09
972 ./martin/Sent Mail/2007/10
|
Этот скрипт можно усовершенствовать - например, сортировать сообщения на основе полей отправителя или темы.
Главное преимущество этого скрипта перед существующими средствами для сортировки почты, работающими на клиенте или сервере, заключается в возможности обработки существующих сообщений. Как правило, большинство систем делают фильтрацию на стадии приема нового сообщения и бессильны перед полученной ранее почтой.
Иногда можно пойти дальше и сделать фильтрацию автоматической, превратив ее как бы в часть почтового сервиса. Автоматические фильтры могут запускаться регулярно, например, ночью, и перемещать сообщения, предварительно оставленные пользователем в некой папке, в определенное место.
Другие примеры автоматизации - предупреждение пользователей о нарастающем количестве писем в их ящиках (обычно это касается папок "входящие") и автоматический перенос давних сообщений в архивную папку, чтобы во "входящих" оставалось только актуальное содержимое. Если у вас есть почтовый ящик по умолчанию, который просматривают, например, ваши клиенты, то автоматическая фильтрация позволит организовать этот ящик так, чтобы нужные сообщения можно было всегда легко найти.
Почтовые фильтры пригодятся и для автоматизации систем обработки заявок от клиентов, где каждому обращению обычно соответствует уникальный номер. С помощью автоматической фильтрации, вроде описанной только что, можно распределять почтовые сообщения по папкам согласно номеру заявки.
В данной статье было рассказано об основных приемах, которые позволяют получить статистику эксплуатации почтового сервера различными пользователями. Эти приемы ничего не скажут об эффективности сервера в целом, однако они подскажут, насколько эффективно каждый из клиентов используют почтовую систему.
Сначала предлагается проанализировать почтовые журналы и определить, кто из пользователей отсылает и получает наибольший объем почты. Далее можно решить, кого из них следует взять на карандаш или даже перевести на отдельные сервера.
Наконец, в статье продемонстрирован более детальный анализ содержимого почтовых папок пользователей, после которого нужные письма отправляются в архив. Другая разумная идея - перебрать все сообщения в почтовом ящике при помощи скрипта и отсортировать по папкам для более удобного расположения.
Научиться
- Оригинал статьи (EN)
- Читайте RSS-ленту и узнавайте о новых статьях из серии System Administration Toolkit. (Дополнительная информация об RSS-лентах developerWorks приведена здесь.)
-
System Administration Toolkit: другие статьи этой серии
- "System Administration Toolkit: стандартные утилиты и команды UNIX" (EN) (Мартин Браун, developerWorks, май 2006 г.): Прочтите эту статью и научитесь применять стандартные команды на разных UNIX-машинах.
- "System Administration Toolkit: управление временем и событиями" (Мартин Браун, developerWorks, май 2006 г.): Статья показывает, как создавать и организовывать скрипты, работающие по времени под управлением
cronиat. - Статья о планировании повторяющихся событий в Java (EN) (Том Уайт, developerWorks, ноябрь 2003 г.) демонстрирует создание простого и универсального каркаса для запуска заданий в определенное время, который легко адаптировать и для более сложных задач.
- Следующая серия статей научит вас программировать в bash:
- "Bash в примерах, Часть 1: Основы программирования в оболочке Bourne again shell (bash)" (Дэниел Роббинс, developerWorks, март 2000 г.)
- "Bash в примерах, Часть 2: Дополнительные основы программирования" (Дэниел Роббинс, developerWorks, апрель 2000 г.)
- "Bash в примерах, Часть 3: Изучаем систему сборки ebuild" (Дэниел Роббинс, developerWorks, май 2000 г.)
- "Настройка UNIX и Linux для совместной работы" (Мартин Браун, developerWorks, апрель 2006 г.): Статья- руководство по настройке совместной работы традиционных UNIX-дистрибутивов и Linux.
- Книга из серии IBM® Redbooks® (EN): Каждая система имеет свои утилиты, поэтому статья Миграция с Solaris на Linux: руководство для системных администраторов поможет разобраться и выбрать нужные.
- "Изучаем модель памяти Linux" (EN) (Викрам Шукла, developerWorks, январь 2006 г.): Описанная в статье модель поможет разобраться, как Linux работает с памятью и подкачкой и как устроен обмен страницами и процессами между ними.
-
Популярные материалы (EN): что больше всего интересует ваших коллег в области AIX® и UNIX
- Другие статьи и учебные пособия Мартина Брауна:
- AIX и UNIX: Раздел developerWorks об AIX и UNIX содержит большое количество информации обо всех аспектах администрирования UNIX, а также поможет вам углубить навыки работы в UNIX.
- AIX и UNIX для новичков: Посетите этот раздел, чтобы познакомиться с AIX и UNIX.
- AIX-вики (EN): Совместно пополняемый ресурс с технической информацией об AIX.
- Ищите нужную информацию об AIX и UNIX в соответствующих разделах:(EN)
- Системное администрирование
- Разработка приложений
- Производительность
- Портирование
- Безопасность
- Советы
- Инструментальные средства и утилиты
- Технология Java™
- Linux
- Open source
- Посетите online-магазин Safari (EN) и найдите нужную техническую информацию
- Будьте в курсе последних технических событий и web-вещаний (EN) developerWorks.
-
Подкасты (EN): Подключитесь и поддерживайте контакт с техническими экспертами IBM
Получить продукты и технологии
- В некоторых сервисах передачи и доставки почты используется система Sieve (EN), которая автоматически фильтрует приходящие письма.
Обсудить
- Примите участие в обсуждении материала на форуме.
- Примите участие в обсуждениях на страницах блогов (EN) и влейтесь в ряды сообщества developerWorks.
- Обсуждайте AIX и UNIX на форумах:
- Технический форум по AIX
- AIX 6 Open Beta (EN)
- Форум по AIX для разработчиков (EN)
- Система управления кластерами (EN)
- Инструмент IBM Support Assistant (EN)
- Техническое обсуждение средств анализа производительности (EN)
- Техническое обсуждение средств виртуализации IBM (EN)
- Различные форумы по AIX и UNIX (EN)
Мартин Браун (Martin Brown) пишет статьи уже более семи лет. Он является автором многочисленных книг и статей по различным темам. Его квалификация охватывает множество платформ и языков разработки - Perl, Python, Java™, JavaScript, Basic, Pascal, Modula-2, C, C++, Rebol, Gawk, Shellscript, Windows®, Solaris, Linux, BeOS, Mac OS X и т.д., а также Web-программирование, системное управление и интеграция. Мартин является внутренним экспертом (SME) компании Microsoft® и регулярно пишет для ServerWatch.com, LinuxToday.com и IBM developerWorks. Он также принимает участие в блогах Computerworld, The Apple Blog и на других сайтах. Связаться с ним можно через его Web-сайт.