サーバー上の貴重なスペースを節約するために、ユーザーが引き続き読むことができる古い電子メール(たとえば、6か月前)を圧縮/アーカイブするようにdovecotを構成するにはどうすればよいですか?
電子メールを圧縮するための構成は、2段階のプロセスです。
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を再起動します
次に、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]*"