サーバー上に1つのユーザーアカウントがあり、約400のアカウントが自動的にいっぱいになります。ユーザーのホームディレクトリにあるdead.letterファイルは、アカウントがいっぱいになるまで自動的に大きくなります(1日あたり約10〜40 Mb)。ユーザーはMicrosoftOutlookを使用してメールを送受信しています。
これを引き起こしている可能性があるのは何ですか?
現在、ファイルを削除する緊急のcronジョブがありますが、 "実際の"ソリューションが必要です。
編集:サーバーのバージョンはRed Hat Enterprise Linux ES release 4 (Nahant Update 4)
です
編集2:主にスパムのようで、メーラーの見出しが異なり(phpからOutlook Expressまで)、頻繁に表示されるヘッダーは[email protected]
です。
更新:問題の原因となる可能性があるのはコントロールパネルであるため、専用サーバーを使用するホスティングプロバイダーにも問題を調査するように依頼しました。
これは、dead.letterファイルに対して実行し、それを作成するプロセスをキャッチできるスクリプトです。
#! /bin/bash
if [ $# -eq 0 ]; then
echo "Syntax: $(basename $0) <file_to_watch>"
exit 1
fi
FILE_TO_WATCH=$1
LOGFILE=/var/tmp/$(basename $0).$(date +"%Y-%m-%d").log
SLEEP_DELAY=5
if [ ! -e $LOGFILE ]; then
echo -e "DATE COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME" > $LOGFILE
fi
echo "Starting lsof tail job with PID $$"
echo "lsof output will be appended to $LOGFILE"
while true; do
if [ -e $FILE_TO_WATCH ]; then
lsof $FILE_TO_WATCH | sed 1d | sed -e "s/^/$(date +"%Y-%d-%m %H:%M:%S ")/" >> $LOGFILE 2>/dev/null
sleep $SLEEP_DELAY
fi
done
たとえば、変数を自由に変更して、遅延をより積極的にすることができます。バックグラウンドジョブとして起動する場合は、次のように呼び出します。
Nohup script.sh /path/to/dead.letter &
スクリプトは、ユーザーの便宜のために使用するPIDをエコーするため、スクリプトを強制終了できます。
編集:あなたのコメントによると、ファイルはあなたがそれを捕まえることができるのに十分長い間プロセスによって開かれたままにされていないようです。/var/log/messagesまたは別のログにエラーが生成されることを期待して、dead.letterファイルに不変フラグを設定することもできます。不変ファイルはrootでも変更できません。
次の手順を実行します:
# rm -f dead.letter
# touch dead.letter
# chattr +i dead.letter
# lsattr dead.letter
----i---------- dead.letter
次に、ルートでもう一度タッチしてみます。あなたはこれを得るでしょう:
touch: cannot touch `dead.letter': Permission denied
これはあなたがそれを正しくしたことを確認します。
記憶が正しければ、何年も前にcronスクリプトが壊れたことが原因である場合があったので、ユーザーcrontab
を確認してください。