メールシステムの管理

メール構成の管理

この節では、メールサービスをスムーズに動作させる方法について説明します。

ポストマスタの作業

メール管理のためのポストマスタの作業は、次のとおりです。

メール待ち行列

高負荷または一時的な障害がある場合、sendmail はメッセージをすぐ配信しないでジョブ待ち行列に入れます。メール待ち行列は通常自動的に処理されます。場合によっては管理者の介在が必要となることがあります。たとえば、主ホストがある期間ダウンすると、待ち行列の動作が妨害されます。sendmail は、ホストが回復したら再起動する必要がありますが、その間には明らかな性能低下が見られることがあります。

待ち行列ファイルのフォーマット

sendmail プログラムは、一時待ち行列ファイルを待ち行列ファイル /var/spool/mqueue に格納します。そのような待ち行列ファイルのフォーマットはすべて xfAA99999 です。AA99999 はファイルの ID で、x は形式です。表 2-3 に、待ち行列ファイルの形式を示します。

表 2-3 待ち行列ファイルの形式

形式 

説明 

d

データファイル。メッセージの本体 (ヘッダーを除く) がこのファイルで保持される 

q

待ち行列制御ファイル。このファイルにはジョブの処理に必要な情報が含まれる 

t

一時ファイル。このファイルは、再構築時の qf ファイルのイメージ。再構築が終わると、ファイルは qf に名前変更される

x

セッションの実行中に発生した事項を示すトランスクリプトファイル 

qf ファイルでは、それぞれコード文字で始まる一連の行が入っています。各メッセージにはこれらの行のすべては含まれていませんが、表 2-4 に一覧表示します。

表 2-4 qf ファイルのコード

コード 

説明 

$

マクロ定義。特定のマクロ (現在は $r$s) の値は、待ち行列の実行段階に渡される

B

本体のタイプ。この行は本体のタイプを定義する。有効な値は 7BIT と 8BITMIME 

C

制御アドレス。構文は localuser:aliasname。この行に続く受信者アドレスは、配信が localuser (パスワードファイルかデータベースからのユーザー名) として実行されるようにフラグが立てられる。aliasname はこのアドレスに展開される別名の名前 (メッセージの出力用)

D

データファイル名。これらの行の 1 つしかない場合がある 

E

エラー受信者名。エラーメッセージは、発信者ではなくこのユーザーに送られる。この行はオプション 

F

フラグビット。これが r の場合は、応答メッセージであることを示し、w の場合は、メールの遅配を通知する警告メッセージが送られたことを示す

H

ヘッダー定義。任意の数の行を入れることができる。順序に意味があり、最終メッセージでの順序を示す。構文は、構成ファイルでのヘッダー定義と同じ 

L

内容の長さを計算するための情報 

M

-bp フラグがある sendmail を使ってプリントされるメッセージ行であり、一般に状態情報の格納に使用される。任意のテキストを入れることができる

P

待ち行列を並べるのに使用される現在のメッセージ優先順位を示す。番号が大きいと、優先順位は低くなる。メッセージが待ち行列にとどまると、優先順位は増大する。初期優先順位は、メッセージクラスおよびメッセージのサイズによって異なる 

R

受信者名。受信者ごとに 1 行ある。受信者名には通常、完全な別名があるが、ジョブが処理されると、その別名が再び付けられる。受信者名は qf ファイルの終端になければならない

S

発信者名。これらの行の 1 つしか入れられない 

T

ジョブ作成または依頼時間を秒単位で示す。ジョブがいつタイムアウトになるかを計算するのに使用される 

詳細は、第 3 章「sendmail 構成ファイルのカスタマイズ」を参照してください。

待ち行列は、sendmail.cf ファイルで指定された間隔 (デフォルトは 1 時間ごと) で自動的に実行されます。待ち行列は読み込まれて、ソートされ、それから sendmail はジョブをすべて順番に処理しようとします。sendmail プログラムは、ジョブがロックされているかどうかを調べるために最初にチェックを行います。ジョブがロックされていると、 sendmail はそのジョブを無視します。ジョブがロックされていなければ、sendmail はそれを処理します。

主ホストが数日間ダウンすると、待ち行列が過剰に大きくなることがあり、sendmail は待ち行列のソートに時間がかかります。待ち行列を一時的な場所に移動し、新しい待ち行列を作成することにより、これを防ぐことができます。ホストがサービスに戻されたら、古い待ち行列をあとで実行できます。

待ち行列を印刷する方法

待ち行列の内容は mailq で印刷できます。このコマンドは sendmail-bp フラグを指定するのと同じです。

    /usr/bin/mailq | more と入力して Return キーを押します。

待ち行列 ID のリスト、メッセージのサイズ、メッセージが待ち行列に入れられた日付、メッセージ状態、および発信者と受信者が表示されます。

待ち行列を強制処理する方法

    /usr/lib/sendmail -q -v と入力して Return キーを押します。

これで待ち行列の処理が強制的に行われ、待ち行列の処理中にジョブの進行状況が表示されます。

メール待ち行列のサブセットを実行する方法

    /usr/lib/sendmail -qRstring と入力して Return キーを押します。

-qRstring (どれかの受信者名が string に一致する場合に待ち行列を実行) または -qInnnn (待ち行列 IDnnnnn の 1 つのメッセージを実行) でいつでも待ち行列のサブセットを実行できます。

この例では、受信者 wnj の待ち行列にあるものをすべて処理します。


# /usr/lib/sendmail -qRwnj

待ち行列を移動する方法

  1. メールホストで root になります。

  2. /etc/init.d/sendmail stop と入力して Return キーを押します。

    これで古い sendmail デーモンは削除されるので、古い待ち行列ディレクトリが処理されることはありません。

  3. cd /var/spool と入力して Return キーを押します。

  4. mv mqueue omqueue; mkdir mqueue と入力して Return キーを押します。

    これでディレクトリの mqueue とその内容のすべてが omqueue ディレクトリに移動し、新規の空の Rmqueue ディレクトリを作成します。

  5. chmod 755 mqueue; chown daemon.daemon mqueue; と入力して Return キーを押します。

    これらのコマンドでディレクトリのアクセス権を設定し、所有者による読み込み、書き込み、実行、グループや、他のユーザーによる読み込み、実行が行えるようにします。またこれらのコマンドでは、所有者やグループを daemon に設定します。

  6. /etc/init.d/sendmail start と入力し Return キーを押します。

    これで新規 sendmail デーモンが起動します。

古いメール待ち行列を処理する方法

  1. /usr/lib/sendmail -oQ/var/spool/omqueue -q と入力して Return キーを押します。

    -oQ フラグは代替待ち行列ディレクトリを指定し、-q フラグは待ち行列での各ジョブを処理するように指示します。詳細 (verbose) 表示にしたい場合は、-v フラグを使用します。

  2. 待ち行列が最後に空になったら、rmdir /var/spool/omqueue と入力して Return キーを押します。これにより、空のディレクトリが削除されます。

    これにより空のディレクトリが削除されます。

システムログ

メールサービスは、syslogd プログラムを使ってほとんどのエラーを記録します。デフォルトでは、syslogdloghost にメッセージを送ります。

/etc/hosts ファイルの loghost というシステムを、NIS ドメイン全体のすべてのログを管理するように定義できます。システムログは syslogd プログラムによってサポートされます。 /etc/hostsloghost を指定します。loghost を指定しなければ、syslogd からのエラーメッセージはレポートされません。

表 2-5 にデフォルトの /etc/syslog.conf ファイルを示します。

表 2-5 デフォルト /etc/syslog.conf ファイル
#ident "@(#)syslog.conf  1.3        93/12/09 SMI"  /* SunOS 5.0 */  
#
# Copyright (c) 1994 by Sun Microsystems, Inc.
#
# syslog configuration file. 
#
# This file is processed by m4 so be careful to quote (`') names
# that match m4 reserved words. Also, within ifdef's, arguments 
# containing commas must be quoted. 
#  
# Note: Have to exclude user from most lines so that user.alert  
#       and user.emerg are not included, because old sendmails  
#       have no 4.2BSD based systems doing network logging, you  
#       can remove all the special cases for "user" logging. 
# *.err;kern.debug;auth.notice;user.none	        /dev/console  
*.err;kern.debug;daemon,auth.notice;mail.crit;user.none /var/adm/messages
*.alert;kern.err;daemon.err;user.none           	operator  
*.alert;user.none	                           		root  
*.emerg;user.none												*  
# if a non-loghost machine chooses to have authentication messages  
# sent to the loghost machine, un-comment out the following line: 
#auth.notice         ifdef(`LOGHOST', /var/log/authlog, @loghost) 
 mail.debug					          ifdef(`LOGHOST', /var/log/syslog, @loghost)  
#  
# non-loghost machines will use the following lines to cause "user"  
# log messages to be logged locally.  
# ifdef(`LOGHOST', ,  
user.err             /dev/console 
user.err             /var/adm/messages
user.alert           `root, operator'  
user.emerg           *  
)

/etc/syslog.conf ファイルを編集することにより、デフォルト構成を変更できます。変更内容を有効にするには、syslog デーモンを再起動する必要があります。メールに関する情報収集のため、次の選択項目をファイルに追加できます。

次のエントリにより、重要なメッセージ、単なる情報としてのメッセージ、およびデバッグメッセージのすべてのコピーが、/var/log/syslog に送られます。


mail.crit;mail.info;mail.debug			/var/log/syslog

システムログの各行には、タイムスタンプ、それを生成したシステム名、およびメッセージが入っています。syslog ファイルは、大量の情報を記録できます。

ログは、連続したレベルとして並べられます。最下位レベルでは、異常なイベントだけが記録されます。最上位レベルでは、もっとも必須なイベントと注目する必要のないイベントが記録されます。慣例により、10 以下のログレベルが「有用」とみなされます。10 を超えるログレベルは通常、デバッグに使用されます。loghostsyslogd プログラムの詳細は、Solaris のシステム管理 を参照してください。