通过 cron 在随机时间运行脚本,但每天运行一定次数

通过 cron 在随机时间运行脚本,但每天运行一定次数

我希望能够每天 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

相关内容