crontab: 定期的にプログラムを動かす

cronでfetchmailを定期起動


さて、いよいよ、「家の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:いやぁ。ユーザー権限のデーモンって嫌いなのよ、なんとなく(笑)