crontab: 定期的にプログラムを動かす
さて、いよいよ、「家のLinux箱に複数のメールアカウントからのメールが自動的に取り込まれていて、自動でフォルダ分けとかもされてて、デスクトップPCからでも、ノートPCからでも同じメールボックスが参照できてると嬉しくない?」プロジェクト(プロジェクト名は例によって適当)も今日で最終回です。
今までの設定で、fetchmail で外部の複数のメールサーバーからメールを取り込み、取り込んだメールは procmail でフォルダに振り分けてMaildirで保存し、溜まったメールはIMAPで読めるようになりました。古いメールデータもIMAPを通じて送り込んであります。
今日は、最後に、fetchmail が常時、外部メールサーバーをポーリングしてメールを取り込むように設定します。
.fetchmailrcの修正
以前の .fetchmailrc の設定の際には、テスト用としてちょっと変な設定をしていたので、まずは、それを実際の運用に使えるよう修正します。
修正箇所は、3点。uidl と、flush をアンコメントし、代わりにkeepを削除します。これで、受信が完了したメールは外部メールサーバーから削除されます。uidlは、一度受信したメールのIDを記憶して、同じメールが複数回受信されてしまうのを防ぐオプションです。基本的にflushされているのならuidlは不要と思われるかもしれませんが、複数のメールを取得する際に数通だけ受信して切れた場合には、uidlを付けていないと、受信済みのメールがダブることになります。
cron 設定
fetchmail はデーモンとして起動させる方法もあるのですが、私はcrondで定期的に起動させる手法をとりました。*1
cronにジョブを追加するには crontab コマンドを使います。
$ crontab -e
~/.fetchmailrc に設定を書いているので、当然、ユーザーアカウントで起動させる必要があります。rootで起動させたり、/etc/crontab を直接編集してはいけません。
cronへの記述は例えばこんなかんじです。
# 5分おきに fetchmail を起動 */5 * * * * fetchmail -s
-sはサイレントモードの意味で、エラーが出ない限りメッセージを出力しません。こうしておけば、エラーが出た時だけ cronのエラーメールがローカルに配送されるようになります。
さてさて
これで、当初やりたかったことは一通り設定できました。
とりあえずしばらく運用しつつ、メール振り分けのレシピを充実させるとしましょう。spamassasin ぐらいは導入するかもしれませんが、現状のプロバイダのスパムフィルタで駄目なら、焼け石に水かもしれませんしね。
*1:いやぁ。ユーザー権限のデーモンって嫌いなのよ、なんとなく(笑)