我希望能够每天 24 小时运行我的脚本 2 或 3 次,但每次在不同的时间运行。
你会推荐什么简单可靠解决方案?
答案1
每天运行脚本 2 次:
0 0,12 * * * sleep $(( $$ \% 21600 )); /path/to/script.sh
这将在中午和午夜启动作业,然后在启动脚本之前休眠最多 6 小时(12 小时间隔的一半)。
每天运行脚本 3 次:
0 0,8,16 * * * sleep $(( $$ \% 14400 )); /path/to/script.sh
这将在午夜、上午 8 点和下午 4 点启动作业,然后在启动脚本之前休眠最多 4 小时(8 小时间隔的一半)。
由于您使用 Ubuntu 标记了它,因此您可能将 bash 作为默认的 /bin/sh,这似乎解释了 $RANDOM (尽管 RANDOM 不是 POSIX 指定的),因此为了获得额外的不可预测性,请将 Zwans 的答案调整为:
每天 2 次运行:
0 0,12 * * * sleep $(( RANDOM \% 21600 )); /path/to/script.sh
每天运行 3 次:
0 0,8,16 * * * sleep $(( RANDOM \% 14400 )); /path/to/script.sh
我将 更改为&&
,;
这将含义从“等待 sleep 命令成功退出”更改为“休眠一段时间,然后无论 sleep 是否完成或被杀死”。另请注意,%
需要逃脱当它是 cron 命令的一部分时,否则它被解释为换行符。
答案2
0 */12 * * * sleep $((RANDOM%x)) && /bin/sh -c /path/to/script.sh
您的延迟将在 0 和 之间x
,因此请自行设置该值。这应该每 12 小时运行一次,并有随机延迟。
确保这是使用 运行的bash
。