<< 2007/01/ 1 1. Spyc 0.2.5
2. kipmsg だそうで
2 3 1. メールってやっぱめんどくさい
4 1. Diigolet が使えないと困る
5 1. FDclone と Emacs の dired で cp
6 1. getmail + maildrop は確かに便利そう
7 1. 爆弾低気圧直撃食らいました
8 9 1. iPhone かぁ
10 1. VMware を使って内部サーバの仮想化を試みる決意をする
11 1. 仮想マシンのディスクの構成で悩む
12 1. ほぉおおぉお < テキストファイル@POSIX
2. ネットワーク上のマウントポイントの確認方法
13 1. しっぱい
2. 入門段階を済ませてから?
14 15 1. cron + dRuby ってできるかな?
16 1. crontab と dotfile について考える
2. 安パーツで高可用性 PC サーバ
3. フジのデジカメプリントは拡張子 .JPEG を認識しない
17 1. Ruby のモジュールをつらつらと
18 1. pear ってなんでミラーがないの
2. prototype.js 1.5 and prototypejs.org
19 1. crontab コマンドでの設定内容を自動バックアップ
20 1. 正規表現の //、コメントの //
21 1. クーラーをファンレスにしたが効果なかった
2. Frenzy 1.1 は SLAX のようなカスタマイズが可能に?
3. netselect であれこれ
22 1. NHKスペシャル『Google革命の衝撃』
23 1. cron, crontab, and more
24 1. cron ジョブに複雑な条件を与えやすくする
25 26 27 28 1. gem の検索って不便だな
29 1. rote いいかもしんない。
30 1. Web検定のサイトが分からない
31 1. DOS/Windows 領域の mount がめんどくさい
>>
トップ «前の日記(2007-01-22) 最新 次の日記(2007-01-24)» 編集

2007-01-23 [長年日記]

_ cron, crontab, and more

※ タイトルには意味ないです。

Unix の伝統的なツールで、かつ GNU のツールが(普及|台頭)していないものには意外と細かいバージョンの違いがある。cron もその一つ。

自分で見て試した限りでは以下のような違いがあった。

FreeBSD/etc/cron.d/* を読まない
Linux cron -j でジョブの実行を数秒分散させるってことはできない?

実行時間の分散についてはランダムにずらすよりは fcron や uschedule の方が賢いのでそんなに気にする必要はないだろうけど、FreeBSD の「設定ファイルを分けることができない」っていうのは、設定するものが増えてくると面倒なような気がしないでもない*1

で、それとは別に cron て意外と不便だなと思うのは

  1. 秒単位の指定はできない
    • やるとしたらプログラムを指定秒 sleep してから動くようにセットする
  2. 「第2月曜」という指定はできない
    • やるとしたら月曜日に実行を予約して、立ち上げたプログラムの方で第2に当たるかどうかをチェックしないといけない

辺り。この辺は Windows のタスクスケジューラの方がよくできている。*2

特に 2 のような要求はビジネスでスケジューリングしたいときには結構出てくると思う。毎月の最終営業日が終業したタイミングでバッチ処理を走らせる、なんてのはいかにもありそうだ*3。その辺考えると伝統的な cron に代わるスケジューラってあってもよさそう。ということでもう一度調べたらこんなものを見つけた。

  • Mcron - GNU Project - Free Software Foundation (FSF)
    • Guile で書く
  • Fcron : a periodical command scheduler for Unix and Linux systems
    • load average とか気にしてくれます。ほとんど cron 互換と言っても差し支えないような?
    • 24時間動いてなくてもいいらしい。その機能は結構嬉しい。開発用クライアントマシンで daemon のログがものすごいことになったりするのをうまく解決できるかも。あんまり細かく見てないけど。
  • uschedule
    • もうちょっと細かい指定ができるんだけど、互換性もなくなってきてるし、なんでこんなにいっぱい分かれてるんだろ?

load average を見て実行を遅らせるとか、やっぱシステム寄りの見方が中心なのかなぁという感じがする。

OSX は launchd で iCal との連携も強化してるっぽいけど、ぱっと見た感じ XML を使うみたいで、直書きのことは考慮してないかなぁ? まぁ人間に都合のいい細かい情報って、逆に機械に読みやすい形式で書式を決めていくのが面倒なケースも多いのでしょうがないのかもしんない。

つーことで結局のところ mcron のようなアプローチで、自分の書きやすい言語で日時などの条件をチェックしてから目的のプログラムを動かす、っていう流れにしちゃうのがいちばんいいのかもしんない。一瞬、YAML で設定ファイルを〜とか思ったけど、そういうことはしない方がたぶんいい。その方法で簡単に記述できるような条件なら、妥協も組み合わせて既存の crontab のフォーマットで再現すべきだろう。

ブツは cron ジョブに複雑な条件を与えやすくする の方に載せました。

Tags: Cron Sysadmin

*1 分かれてる方が面倒なケースもあるし、一概には言えないけど。

*2 タスクスケジューラが設定一覧をファイルに簡単に吐き出せるとか、逆にファイルからサクっと設定を読み込めるとか、そういうことができれば使いやすいのになぁ。

*3 この場合は日付でも指定できないし、曜日でも指定できない。毎月1日の前日の夜、という指定で置き換えるなら条件的にはもう少し楽になるけど。