Mail.app や iGTD の vacuum を cron で自動化する

2007/12/08 10:00am

Warning

この方法でデータベースを VACUUM すると、Mail.app で問題が起こるようだ。Mail.app を起動中に cron が実行されるとメールを送信できない、下書き保存できない、などの問題があった。というわけで、この方法は使わないか、問題が起こらないように改良する必要がある。

Mail.app を vacuum して高速化」や「iGTD も vacuum すると速くなる」でも書いたように、Mac のアプリケーションのいくつかは、ターミナルから VACUUM ANALYZE という SQL を実行することで高速に動作するようになる。

しかし、このコマンドを毎回手動で実行するのは面倒なので、自動化することにした。自動化、といっても大層なものではなく crontab にコマンドを書いておき、毎日実行されるようにしただけ。

% **crontab -e**
0 15 * * * sqlite3 ~/Library/Application\ Support/iGTD/iGTD.sql "vacuum analyze" > /dev/null 2>&1
0 15 * * * sqlite3 ~/Library/Mail/Envelope\ Index "vacuum analyze" > /dev/null 2>&1

sqlite コマンドを直接書いているので見苦しいが、別スクリプトにした場合の管理を考えると面倒だった。ここでは標準エラー出力を /dev/null に捨てている(ただし、アプリケーションがデータベースをロックしていると、VACUUM ANALYZE は “database is locked” というエラーで即座に終了する)。