sendmail mqueue-client をクリアできません

sendmail mqueue-client をクリアできません
drwxr-xr-x  2 smmsp smmsp  4.0K May  6 23:31 mqueue
drwxrws---  2 smmsp smmsp  29M May  8 10:40 mqueue-client

ご覧のとおり、mqueue-client29 MB の未送信メールが入っています。これは、ローカルホストにメールを送信する内部関数が失敗したためと思われます。

キューをクリアするために何度も試みましたが、どれも成功しませんでした。結果として、プロセスがかなりの CPU リソースを消費することになります。

16287 smmsp     20   0 50212  44m 2416 R   85  4.4 965:35.45 sendmail-msp

プロセスを強制終了したり、sendmail サービスを停止したり、mqueue-client の内容を削除したり、smmsp ユーザーに切り替えたりしてみましたが、どれも機能しませんでした。rmメールを削除しようとするとハングします。

このキューを空にするにはどうすればいいでしょうか?

これを完了したら、すべてを Postfix に移行します。

答え1

コメントで Janne が示唆したように、自分のメールを調べたところsyslog、送信に失敗したメールが多数あり、そのせいでメールが延期され、mqueue-clientフォルダー内に山積みになっていることがわかりました。

調べてみるとクローンタブ完了/通知/警告/エラー時にルートにメールを送信するように設定されています。これを発行して構成の先頭にcrontab -e追加することでMAILTO=""、メールは送信されなくなり、問題は解決しました。

mqueue-client今、私はこの Bash スクリプトを使用して150 万件ほどの不良メールを削除しています:

#!/usr/bin/env bash

cd mqueue-client

deleted=0

for i in `ls`
do
        rm -f $i
        percentage=$(bc <<< "scale=2; ($deleted / 1035435) * 100")
        ((deleted++))

        echo "Deleted $i. Files deleted $deleted. $percentage% complete."
done

/var/spoolから実行する./filename

アップデート

残念ながら、このスクリプトを一晩中実行した後、メール キューは大幅に削減されませんでした。これは、キューをクリアするように設定されている CRON の実行を無効にしていなかったため、バックログが増大していたためです。これで、これが無効になり、すべてがクリアされるはずです。

関連情報