web-dev-qa-db-ja.com

dovecotで古いメールを圧縮する

サーバー上の貴重なスペースを節約するために、ユーザーが引き続き読むことができる古い電子メール(たとえば、6か月前)を圧縮/アーカイブするようにdovecotを構成するにはどうすればよいですか?

1
Tofandel

電子メールを圧縮するための構成は、2段階のプロセスです。

  1. 圧縮された電子メールを読み取れるようにdovecotを構成する必要があります
  2. メールを圧縮するためにcronジョブを設定する必要があります

Dovecot構成

Dovecotの構成ファイルを作成して、zlibプラグインを有効にします

Dovecot構成ファイルは通常/etc/dovecot/conf.d/にあります

このディレクトリにこのコンテンツを含む35-zlib.confという名前のファイルを作成できます

# Enable Zlib for imap
protocol imap {
  mail_plugins = $mail_plugins zlib
}
# Enable Zlib for pop3
protocol pop3 {
  mail_plugins = $mail_plugins zlib
}
# Increase memory allowed for imap as it costs more to read compressed files
service imap {
  vsz_limit = 1024MB
}

doveconf -nを使用して構成が正しいことを確認してから、service dovecot restartを使用してdovecotを再起動します

毎日のcronジョブ

次に、6か月以上経過したメールを圧縮するために、スクリプトを毎日実行する必要があります。

うまくいけば、これは[verbose]findコマンドで実行できます

/etc/cron.daily/でファイルを作成し、それをarchive-emailと呼びましょう。

このスクリプトを書いてください

#!/bin/sh
find /var/qmail/mailnames -mtime +182 -type f -regex ".*\.$HOSTNAME,.*S=.*,[a-yA-Y]*" ! -name "*\.gz*" -exec cp -a "{}" /tmp/ \; -exec sh -c "basename \"{}\" | xargs -L1 -I[] gzip \"/tmp/[]\"" \; -exec sh -c "[ -f \"{}\" ] && (basename \"{}\" | xargs -L1 -I[] mv \"/tmp/[].gz\" \"{}Z\" && rm \"{}\") && echo \"{}\" >> /var/log/archived-emails.log || (basename \"{}\" | xargs -L1 -I[] rm \"/tmp/[]\")" \;

作成したファイルに対してchmod +xを実行して、実行可能にすることを忘れないでください

/var/qmail/mailnamesは通常、メールが保存されるルートフォルダであり、設定によって異なる場合があります

-mtime +182修飾子を使用すると、182日(基本的には6か月)以上前に作成されたファイルのみを検索し、それに応じて変更できます。

-type f -regex ".*\.$HOSTNAME,.*S=.*,[a-yA-Y]*"修飾子を使用して、Zフラグが含まれていない電子メールファイルのみを検索します。これらのファイルには通常、この形式で名前が付けられます1505740244.M351559P24632.my.domain.com,S=38204,W=40910:2,S maildir形式の詳細 ここ

最後に、圧縮中の競合を避けるために、圧縮する電子メールを\tmp dirにコピーします。ファイルに対してgzipコマンドを実行し、ファイルが元の場所にまだ存在する場合は、名前にZフラグを追加して再度移動します。それらが圧縮されていることを示して、再度gzipで圧縮せず、最後に元のファイルを削除します

このプロセスは dovecot wiki のガイドラインに従って実装されていますが、maildirlockユーティリティ バグがあります v2以降、修正されていないので、私は ' m使用していませんが、問題が発生する可能性は低いです。

また、正常にアーカイブされたすべてのファイルを\var\log\archived-emails.logに記録します

Execを使用せずに最初にターミナルでコマンドを実行して、正しいファイルと一致することを確認できます。

find /var/qmail/mailnames -mtime +182 -type f -regex ".*\.$HOSTNAME,.*S=.*,[a-yA-Y]*"

1
Tofandel