仙台の山奥で自転車に乗ったり転んだり

愛車の GIOS でサイクリングしたりポタリングしたり、それをブログに記録してみたり。ロードバイクや自転車や坂のことを書いてみたり。ときたまプログラムのことを忘れないようにメモってみたり。

qmailのqueue操作(確認→削除)

配送キューの(簡易)統計情報を確認
キューに溜まったままのメッセージがあるかを確認する。

# /var/qmail/bin/qmail-qstat
messages in queue: 1
messages in queue but not yet preprocessed: 0

溜まったメッセージキューのヘッダを部分表示
キューを操作するために、メセージIDを調べる。

# /var/qmail/bin/qmail-qread
16 Nov 2011 00:00:00 GMT  #30000  xxx  <foo@example.com>
        remote  bar@example.org

プロセスを停止

# svc -d /var/qmail/service/qmail
# svstat /var/qmail/service/qmail
/var/qmail/service/qmail: down 2 seconds, normally up
# svc -d /var/qmail/service/smtp
# svstat /var/qmail/service/smtp
/var/qmail/service/smtp: down 2 seconds, normally up

キューに関連する3つのファイルを削除(キューに関連するファイルを手動で削除)

  • 送信キュー
    • /var/qmail/queue/info/NN/Message-Id
    • /var/qmail/queue/mess/NN/Message-Id
    • /var/qmail/queue/remote/NN/Message-Id
  • 受信キュー
    • /var/qmail/queue/info/NN/Message-Id
    • /var/qmail/queue/mess/NN/Message-Id
    • /var/qmail/queue/local/NN/Message-Id
# cd /var/qmail/queue
# find info -type f
info/10/30000
# find mess -type f
mess/10/30000
# find remote -type f
remote/10/30000
# rm {info,mess,remote}/10/30000

NNに入る1〜20の数字を見つけなければいけないので、↑ではfindコマンドで検索して実行している。

プロセスを再開

# svc -u /var/qmail/service/qmail
# svstat /var/qmail/service/sqmail
/var/qmail/service/qmail: up (pid xxx) 1 seconds
# svc -u /var/qmail/service/smtp
# svstat /var/qmail/service/smtp
/var/qmail/service/smtp: up (pid xxx) 1 seconds

配送キューの(簡易)統計情報を確認する。
キューに溜まったままのメッセージがないことを確認して終了。

# /var/qmail/bin/qmail-qstat
messages in queue: 0
messages in queue but not yet preprocessed: 0

ここまで手動で実行する手間を考えると、「qmHandle」はすごく便利でした。

qmHandleをインストール

# wget http://downloads.sourceforge.net/project/qmhandle/qmhandle-1.3/qmhandle-1.3.2/qmhandle-1.3.2.tar.gz
# tar xzvf qmhandle-1.3.2.tar.gz
# cd qmhandle-1.3.2
# cp qmHandle /usr/local/bin/
# vi /usr/local/bin/qmHandle
29,30c29,30
< my ($stopqmail) = '/usr/local/bin/svc -d /service/qmail-deliver';
< my ($startqmail) = '/usr/local/bin/svc -u /service/qmail-deliver';
---
> my ($stopqmail) = '/usr/local/bin/svc -d /var/service/qmail';
> my ($startqmail) = '/usr/local/bin/svc -u /var/service/qmail';
/usr/local/bin/svc -u /var/service/qmail

メッセージ番号を取得

# qmHandle -l

メッセージ番号「xxx」を確認して削除

# qmHandle -mxxx
# qmHandle -dxxx