Cyrus IMAPdでのメールボックスの復旧
メールを処理するスクリプトのexpireの設定を変えて再起動したところ以下のような感じのエラーになった。
open: user akira opened INBOX.Junk SQUAT failed to open index file SQUAT failed Fatal error: word too long
てっきりメールボックスが壊れたものだと思って(何度か壊れたことがある)cyrus.{cache,header,index}を削除してやり直したら、今度は単にメールボックスにアクセスできなくなった。たしかメールボックスを作り直すツールがあったよなとcyrreconstructを試すも、どうにもうまく動いてくれない。どうもメールボックスの指定方法が悪いらしい。いろいろ検索してみたりもしたのだけど、結局、試行錯誤の末に以下のコマンドラインで削除したファイルを再生成できた。
cyrreconstruct -rf user.akira.Junk
これで一安心と思ってスクリプトを再起動したら、なんとまた同じエラーが。今度はエラーメッセージ自体を調べてみたら、なんのことはない、IMAPコマンドが長すぎるという意味だった。とりあえず、一度に削除するメッセージ数をある程度以下にするようスクリプトを変更したところ、ようやくきちんと動くようになってくれた。
ちなみにSQUAT failedのほうはIMAP SEARCH用のインデックスファイルがないという意味で、これはそのようなインデックスを作っていないのなら無視してよいらしい。あるいはsquatter(8)を使ってインデックスを作っておくとIMAP SEARCHでそれが使われるようになるらしい。ただし、新しくメッセージが登録されてもインデックスは更新されないようで、cyrus.confのEVENTS { ... }で定期的にインデックスを再構築しなければならないとのこと(更新ではない)。
トラックバック
トラックバックリンク:
http://arika.org/diary/trackbacks?article_id=2336

