My Tracking

読者です 読者をやめる 読者になる 読者になる

My Tracking

記憶力の低下が気になるアラフォー男の備忘録

【sendmail】mailqの処理の備忘録

メールシステムの運用を行うと、メールキューが溜まったり、またそれらをメンテナンスしたりと 比較的に、メールキューに近いところでシステム管理業務をすることが多いので、その備忘録。

なお、下記はsendmailをベースとした内容を前提としている。

目次

メールキューとは

sendmailは、メールメッセージをすぐに配信することができなければ、 後で配信するためにそのメールメッセージを一時的に保存される。

この一時的に保存される場所のことが「キュー」と呼ばれる。

メールキューの再送間隔とかキューの保持期間とか。

確か、キューに保存されるとsendmailには以下のデフォルトが適用されると思ったが、定かでない。

  • 再送間隔:1時間
  • キュー内の保持最大期間:5日(当該期間を超過すると削除だったはず

※今度、しっかり調べる・・

キューに保存されるファイル

キューに保存されるメールメッセージは、2つに分類される

  • qfファイル:メッセージヘッダ(キュー制御ファイル)
  • dfファイル:メッセージ本文

qfファイル

メッセージヘッダ(キュー制御ファイル)を制御するqfファイルは 下記のような内容を保持している。

  • メッセージの配信。(発信アドレスと受信者アドレス)
  • メッセージの処理順序
  • メッセージの期限切れによる削除
  • メッセージの説明

実際には、下記のような内容となる。(※補足説明のために追加)

[root@mx-ns mqueue]# cat qfu7S5iNCP018797
V8(※バージョン)
T1472363064(※キューに生成された日時)
K1472364785(※最後に処理された時間)
N2(※施行した回数)
P210451(※優先度)
I253/2/131555
MDeferred: mx1.mail.yahoo.co.jp.: No route to host(※キューに入った原因)
Fbs
$_localhost [127.0.0.1]
$rESMTP
$smx-ns.simalab.com
${daemon_flags}
${if_addr}127.0.0.1
S<ment@mx-ns.simalab.com>
MDeferred: mx1.mail.yahoo.co.jp.: No route to host
rRFC822; test@yahoo.co.jp
RPFD:<test@yahoo.co.jp>
H?P?Return-Path: <g>※以降はメールヘッダ情報
H??Received: from mx-ns.simalab.com (localhost [127.0.0.1])
        by mx-ns.simalab.com (8.14.4/8.14.4) with ESMTP id u7S5iNCP018797
        for <test@yahoo.co.jp>; Sun, 28 Aug 2016 14:44:24 +0900
H??Received: (from ment@localhost)
        by mx-ns.simalab.com (8.14.4/8.14.4/Submit) id u7S5iN7L018796
        for test@yahoo.co.jp; Sun, 28 Aug 2016 14:44:23 +0900
H??From: ment@mx-ns.simalab.com
H??Message-Id: <201608280544.u7S5iN7L018796@mx-ns.simalab.com>
H??Date: Sun, 28 Aug 2016 14:44:23 +0900
H??To: test@yahoo.co.jp
H??Subject: test
H??User-Agent: Heirloom mailx 12.4 7/29/08
H??MIME-Version: 1.0
H??Content-Type: text/plain; charset=us-ascii
H??Content-Transfer-Encoding: 7bit
.
[root@mx-ns mqueue]#

dfファイル

メール本文は、dfファイルとして、保存される。 たとえば、「test」というメール本文となるメールのdfファイルは 下記の通りとなる。

[root@mx-ns mqueue]# cat dfu7S5iNCP018797
test
[root@mx-ns mqueue]#

mailqの表示

実際にメールキューを表示する場合は、「mailq」コマンドを実施する。

[root@mx-ns mqueue]# mailq
                /var/spool/mqueue (1 request)
-----Q-ID----- --Size-- -----Q-Time----- ------------Sender/Recipient-----------
u7S5iNCP018797        5 Sun Aug 28 14:44 <ment@mx-ns.simalab.com>
                 (Deferred: mx1.mail.yahoo.co.jp.: No route to host)
                                         <test@yahoo.co.jp>
                Total requests: 1
[root@mx-ns mqueue]#

mailqの削除

メールキューを削除する場合は、通常は/var/spool/mqueue/のディレクトリ上で、 下記のとおり、実行する。

rm -f [dq]f[キューID]

キューIDを「u81EtjjS018075」を削除したい場合、下記のとおり実施し、 qfファイルとdfファイルを一緒に実行する。

※[dq]の後のfを忘れずに付ける。

[root@mx-ns mqueue]# cd /var/spool/mqueue/
[root@mx-ns mqueue]# rm -f [dq]fu81EtjjS018075

実行中のmailq

mailqを確認したとき、メッセージIDの右側にアスタリスク(*)があるメールキューは そのメッセージがロックされていることを示す。

[root@mx-ns ~]# mailq
                /var/spool/mqueue (2 requests)
-----Q-ID----- --Size-- -----Q-Time----- ------------Sender/Recipient-----------
u7S7aDBu020301*       2 Sun Aug 28 16:36 <ment@mx-ns.simalab.com>
                                         <test@yahoo.co.jp>
[root@mx-ns ~]# 

ロックされているファイルを先述の削除方法で、実行した場合、 うまく削除できない場合がある。

その場合は、当該プロセスを強制的に削除してから、削除する。

ファイルをロックしているプロセスを確認する。

[root@mx-ns ~]# ps -ef | grep sendmail
root      1360     1  0 Aug27 ?        00:00:02 sendmail: accepting connections
smmsp     1369     1  0 Aug27 ?        00:00:00 sendmail: Queue runner@01:00:00 for /var/spool/clientmqueue
root     20394     1  0 16:41 ?        00:00:00 sendmail: ./u7S7f0FQ020391 mx3.mail.yahoo.co.jp.: user open
root     20411 20396  0 16:41 pts/0    00:00:00 grep sendmail
[root@mx-ns ~]#

上記で、u7S7f0FQ020391をロックしているプロセスID20394を強制停止する。

[root@mx-ns ~]# kill -9 20394
[root@mx-ns ~]# ps -ef | grep sendmail
root      1360     1  0 Aug27 ?        00:00:02 sendmail: accepting connections
smmsp     1369     1  0 Aug27 ?        00:00:00 sendmail: Queue runner@01:00:00 for /var/spool/clientmqueue
root     20415 20396  0 16:41 pts/0    00:00:00 grep sendmail
[root@mx-ns ~]#
[root@mx-ns mqueue]# service sendmail status
sendmail (pid  1360) を実行中...
sm-client (pid  1369) を実行中...
[root@mx-ns mqueue]#

再度mailqを表示する。u7S7f0FQ020391のアスタリスク(*)が消えていることを確認。

[root@mx-ns ~]# mailq
                /var/spool/mqueue (1 request)
-----Q-ID----- --Size-- -----Q-Time----- ------------Sender/Recipient-----------
u7S7f0FQ020391        5 Sun Aug 28 16:41 <ment@mx-ns.simalab.com>
                                         <test@yahoo.co.jp>
                Total requests: 1
[root@mx-ns ~]#

ファイルのロックが消えたら、当該キューIDを削除する。

[root@mx-ns ~]# cd /var/spool/mqueue/
[root@mx-ns mqueue]# rm -f [dq]fu7S7f0FQ020391
[root@mx-ns mqueue]# mailq
/var/spool/mqueue is empty
                Total requests: 0
[root@mx-ns mqueue]#

mailqから、キューIDのみ抽出する。

mailqに大量のキューが溜まった場合、キューIDのみ 抽出したい場合のコマンド。(うまいかどうかはさておいて)

[root@mx-ns mqueue]# mailq | sed -e 's/\s\+/ /g' | cut -d' ' -f1 | grep "^u"
u81FU89g026804
u81GU8bU009083
u81JleD0025444
u819U8pe002487*
u81GU8bS009083
u81DU8CX029519
u81NSj96014787
u816U88x022456*
u818U8rP020157
u81AU8jW017518
u816U891022456
u817U8En005000
u816U890022456
u819U8pd002487*
u81G7g8M003629
u81BU8OZ032246
u817U8Eo005000*
u818U8rQ020157*
u817U8El005000*
u817U8Em005000
u815U8VB007800*
u81EtjjS018075*
u81F7MY1020895
u81AQsV3016687
u7VI79np032048
u7UJU8fS020724*
u7U1U8Ub011452
u7TNIIGO011127
u7T16129005631*
[root@mx-ns mqueue]#

参考文献

sendmail 第3版〈VOLUME1〉運用編

sendmail 第3版〈VOLUME1〉運用編