Perl для системного администрирования



              

Распространенные ошибки при отправке почты - часть 5


Контролируем количество сообщений

Другая разновидность синдрома «чрезмерной отправки почты» - это проблема «каждый в сети за себя». Если все машины из сети решат послать вам чуточку почты, вы вполне можете пропустить что-то действительно важное в этом потоке сообщений. Было бы лучше, если бы все сообщения отправлялись в центральный репозиторий. А затем в собранном виде почта поступала бы в одном сообщении.

Давайте рассмотрим несколько надуманный пример. Предположим, что каждая машина в сети записывает в разделяемый каталог файл, состоящий из одной строки. Имя каждого файла совпадает с именем машины и в каждом из них хранятся результаты научных вычислений, сделанных прошлой ночью. В файле будет одна строка следующего формата:

имя-узла

удача-или-неудача

количество-завершенных-вычислений

Программа, проверяющая эту информацию и отсылающая результаты, может выглядеть так:

use Mail::Mailer; use Text::Wrap;

tf список машин, отправляющих сообщения

$repolist = "/project/machinelist";

ft каталог, куда они записывают файлы

Srepodir = "/project/reportddir";

it

разделитель файловой системы, используется для переносимости.

 Можно было бы использовать модуль File::Spec

$separator= "/";

# отправляем почту "с" этого адреса

$reportfromaddr = "project\@example. corn";

# отправляем почту на этот адрес Sreporttoaddr = "project\@example.com";

tf считываем список машин в хэш. Позже будем вынимать из этого

# хэша по мере доклада машин, оставив только те машины, которые

 не принимали участие в действии

open(LIST,$repolist) or die "Невозможно открыть список

$repolist:$!\n"; while(<LIST>){

chomp;

$missing{$_}=1;

$machines++; }

# считываем все файлы из центрального каталога

и замечание: этот каталог должен автоматически очищаться другим

# сценарием

opendir(REPO,Srepodir) or die "Невозможно открыть каталог $repodir:$!\n";

while(defined($statfile=readdir(REPO))){

next unless -f Srepodir.$separator.$statfile;




Содержание  Назад  Вперед