cronジョブからローカルの受信トレイに送信された各Eメールを別のEメールに記録しようとしています。txt文書。ラインを使用するとき
mail | grep cron > cron_mail.txt
ジョブが停止せずに空きスペースが作成されます。cron_mail.txt。
この問題をどのように解決できますか?それともbashでより簡単に解決する方法はありますか?
答え1
メールは標準エラーストリームとして出力されるように見えるため、標準出力のみがパイプされるため、grepにパイプされません。
努力するmail 2>&1 | grep cron > cron_mail.txt
2 は標準エラーストリームのファイル記述子です。上記のコマンドを使用すると、標準出力にリダイレクトされ、パイプされます。
答え2
ローカルメールバックエンドがBerkeleyメールボックスファイルの場合は、以下を試してください。
grep '^From cron ' "$MAIL"
From
これは、Berkeley mboxファイルが各新しいメッセージの前に区切り線(送信者のエンベロープアドレス)で始まる行と2つのスペース(通常はメッセージの到着時間が続く)を使用するという事実に依存します。 (結果として、メッセージ本文には行のFrom
先頭のどこにも5文字を含めることはできません。)cron
たとえば、デーモンのメッセージにFQDNドメイン名が含まれている場合は、正規表現を調整する必要があります。
Berkeley mboxはかつてどこにも存在していましたが、今では多くのシステムが異なるメールボックス形式を使用しており、その多くは単一のフラットファイルではなくフォルダベースです。 maildir(特にIMAPメールボックスの一般的な形式)の場合は、以下を試してください。
find new cur tmp -type f -exec grep -m 1 '^From:' /dev/null | grep cron
各メッセージのヘッダーを確認しますFrom:
(まったくメッセージヘッダーではなく、同様にマークされたBerkeley区切り文字とは異なります)。確認したいフォルダから実行するか、ディレクトリパラメータに、およびサブディレクトリへnew
のフルパスを含めることができますcur
。tmp