Linux
cron
crontab

crontabで奇数分や偶数分などに実行する指定を簡単に書く方法

More than 1 year has passed since last update.


*/2

cron で2分毎にコマンド実行をしたいときって */2 とかって書くことよくありますよね。5分毎なら */5 とか。


1,3,5,7,...

で、よくあるパターンですが2台のサーバがあって、片方は 0,2,4,6,.. のタイミングで実行して、もう一方では 1,3,5,7,... のタイミングで実行したいこともよくありますよね?こういうとき前者は */2 でいいんだけど、後者はカンマで列挙するのが辛い…みたいな思いをすることもしばしば。


1-59/2

実はこれ 1-59/2 って書けば奇数分に実行するっていう意味にになるんですって。20年近く cron 使ってて初めて知りました!


割り算じゃなくてステップ数

1-59/2 の 2 って割り算をして余りがゼロになるかどうかをチェックしてるんだとずっと思ってたんですが、実はこれ範囲値に対するステップ数なんですね。


3n + m

なので、0-59/31-59/32-59/3 みたいに書けば 3n + m 分に実行するなんてことも簡単に出来ちゃいます。


man 5 crontab

実は man 5 crontab をちゃんと読むと最後の方の拡張ってとこにちゃんとサンプル付きで説明が書いてあるんですね。悩む前に man くらいちゃんと読めって事ですね…、反省。

ちなみに man crontab だと crontab コマンドのマニュアルが出てきてしまうので、crontab の書式についてのマニュアルは man 5 crontab ってする必要がありますので注意してください。

ところで man 5 って日本語だとなんだか口に出して読みにくいですよね。脳内で読むだけでもなんかソワソワしちゃうのは僕だけだろうか…。