木曜日, 11月 03, 2005

cron.d

linuxにはプログラムを予約して実行する、CRONというプログラムがあります。
「それじゃあ、任せたよ」と言っておくとちゃんとやっておいてくれるわけです。コンピューターって素直。

awstatsの設定の仕上げでcronに登録したわけです。で、これが動いてない。
なんと、cron.dの中のファイル名には制約があったんですね。「.」は使えない文字でした。
awstats.confはawstatsというファイル名で動いていたので、awstats.juanmao.net.confはawstats.juanmao.netで動かそうとしたんですね。
でも統計結果が全然更新されていないので、変だなあと。

調べてみると、これはCRONの制限と言うよりはrun-partsコマンドの制限みたいですね。
これは指定したディレクトリの中の実行ファイルを実行する、というもの。
で、CRONはそれにあわせたみたいです。cron.dailyなんかを実行するときには使ってますしね。

ファイル名で実行する、しないを決めるなんて下手な設計です。問答無用で実行してしまえばいいのに。
もし特定のファイルだけ実行したいならシンボリックリンクのディレクトリを作ればいいだけじゃないか!そういえばinitはそうだし。
なんでそうなったのかは知らないけど、今も残ってるのはよくある「歴史的な理由」ってやつなんでしょうか。互換性を維持、みたいな。
違うプログラム名にすればいいだけのことだろ、とか考えてたらオプションでそういう動作はできるらしいです。ま、普通ですね。

ちなみにこのcron.d、下手にファイルを置くと将来インストールするアプリケーションと名前が衝突する可能性があるのであまり使わないほうがいいです。つまりこのディレクトリはアプリケーション用だったわけです。
特定のユーザーで実行したいならそのユーザーでcrontabを使いましょう。こっちなら問題なし。
www-dataとかシステムユーザでcrontabをインストールするのはちょっと嫌かもしれません。そんなときには/etc/crontabを使うといいわけですね。対話的にシェルを使わないユーザーはこっち、というわけです。

要するに、僕は一番よくないやり方でやってたみたいです。
さすがにこれだけ枯れたシステムだと、似たような方法がいくつもあるのには意味があるし、ちゃんとしたやり方も用意されていたということですね。
注意しないといけないですね。

0 件のコメント: