灯台下暗しその2 anacron cron.daily find編

Linux使いはじめのVineのころから常々思っていたのだけれど、Linuxを起動して数分経つとハードディスクにものすごい勢いでアクセスをはじめてその間アプリケーションをロクに動かせない状態ってのがどうにも気になっていた。単にデスクトップマシンとして使っていたのでおそらくはanacronによるものであるとpstreeなどから推測していたけれど原因をそれ以上追求することなくここまできてしまった。だが最近こんなのを見つけた。
http://home.catv.ne.jp/pp/ginoue/memo/locate-anacron.html

勘のいい人は気づくかもしれませんが、ぼくのように夜、家に帰ってからPCの電源をいれるような使い方、つまり平均的に1日1回起動する場合、起動時に100%の確率でdailyタスクが走ります。 anacronの意図した動作じゃないか、と言われればそれまでですが、ほんの10分だけメールをチェックしようと思って電源いれて、いきなり重い処理が走ったら勘弁してほしいということになります。 (ぼくの予想では、実際に使ってから気づいて入れた機能じゃないかと思っていますが)こういう事態に備えて、anacronのタスクの実行にはdelay(遅延)を指定できます。上の例の50の部分がそれで、50分間待ってからタスクが実行されます(Debianのデフォルトは5分か10分だったのですが、ちょっと短いので50分にしています)。

だらだら書いていますが、ようやくlocate(1)コマンドの紹介です。 locateコマンドは、ファイル名の高速サーチコマンドです。ファイル名でファイルを検索する用途には、普通find(1)コマンドを使います。しかし、findはディレクトリを全部なめていくので、結構遅いものです。特にルートディレクトリ以下からのファイルの検索なんてのになると、数年前の数ギガ時代ならともかく、数10ギガの世界では、ディスクアクセス音フェチでもない限り、耐えられるものではありません。一方、locateはあらかじめインデクサを作っておくので、検索はたいてい瞬時です。

ここで初めて、anacronとの接点が生まれます。インデクサの更新をするタスクを定期的に走らせる必要があるからです。 Debianのデフォルトでは、/etc/cron.daily/findスクリプトがそれです。このスクリプトは、ルートディレクトリ以下をfindコマンドで全てなめて、インデクサを更新します。毎日電源いれて50分経つと、ディスクがガリガリ(この擬音古い?)言い出します。正直、毎日更新するほどの必要性は感じないので、ぼくは/etc/cron.daily/findを/etc/cron.weekly/findに移動しました。 anacronを入れていない時は、滅多にインデクサが更新されませんでした。更新されないインデクサは役立たずなので、anacronは役にたっています。

というわけで滅多にファイル検索などしないので/etc/cron.monthly/findに移動してやった。これで数年越しの課題がようやく解決。