wtatsuruの技術方面のブログ

はてなスタッフ id:wtatsuru です。日常ブログはこちら https://tatsuru.hatenablog.com/

crontab の割り算と大きな数字

crontab にこんなのが書いてありました

*/120 * * * * $COMMANDS

書いた人は2時間おきに実行したかったんだと思いますが、まあうそっぽいですよね。
ちなみに crontab(5) には "steps" と書いてあります。

       Ranges can include "steps", so "1-9/2" is the same as "1,3,5,7,9".

ISC cron 3.0 の entry.c を観察。
まず * は最小から最大まで、と同じ意味。なるほど。

	if (ch == '*') {
		/* '*' means "first-last" but can still be modified by /step
		 */
		num1 = low;
		num2 = high;

で、num1-num2/num3 の形式で記述されてると num3 を step として単純に num1 から num2 まで増やしてる。大きすぎる数字を入れると一発目しか実行されない。

	/* range. set all elements from num1 to num2, stepping
	 * by num3.  (the step is a downward-compatible extension
	 * proposed conceptually by bob@acornrc, syntactically
	 * designed then implmented by paul vixie).
	 */
	for (i = num1;  i <= num2;  i += num3)
		if (EOF == set_element(bits, low, high, i))
			return EOF;

結論

大きな数字を書いても意味がない

Twitterでのやりとり

@songmu さんの言う通りの結論でした。

はてなで一緒に働きませんか?