たとえば5分ごとにcronを実行しない

  • 9
    Like
  • 9
    Comment

毎分実行していたcronを、別処理との関係上、5分ごとの実行は除外して欲しいと言われた。

改修案も提示してもらっていた。
1-4,6-9,11-14,16-19,21-24,26-29,31-34,36-39,41-44,46-49,51-54,56-59 * * * *
でも
* * * * *
からそれはあまりにも見栄えが悪いと思った。

*/nでn分置きに実行できることは知っていたし、

cronを2分,7分,12分...みたいな半端なタイミングで動かす - Qiita

も見ていたので、逆のことをもっと簡潔にできないかなーと思った。

5nで実行しないということは、5n以外を全部実行するということだから、
たとえば5n+1は絶対5nで実行されない記述になるはず。

あとは切片?mを増やせば網羅できそうで、直感的になんか

1 \leqq m < 5

で網羅できる気がふんわりした。
そこは数学的に証明しろよとなるけれど、抜けが5の倍数と目視し易いし、範囲が1~60(0)と狭い範囲だったので、
コマンドをdate >> logとして5分刻みに出力がなくなっているかを確認した。
イけてそうだったので、

1-4,6-9,11-14,16-19,21-24,26-29,31-34,36-39,41-44,46-49,51-54,56-59 * * * *
から
1-59/5,2-59/5,3-59/5,4-59/5 * * * *
に短縮された。

1,6,11,16,21
2,7,12,17,22
3,8,13,18,23
4,9,14,19,24

手作業に見るにいけそう。

記述の意図がどっちの方が伝わりやすいかについては客観視できないので、置く。
1-4形式であるとは思うんですが…長さがいただけない…と思っちゃうんですが…。


これもキーワード的に言語化の不自由と情報の海に埋もれてうまく検索できないシリーズになりそうですが、絶対あるとは言えなさそうな需要なので選外。

cronじゃなく数学ぽいところを探せばいいのかな?

参考