需要在随机时间每天运行一次shell脚本。 (所以每天在00:00-23:59之间进行一次)。随机时间每天运行一次shell脚本
我知道sleep
命令和cron
太多,但
- 的
cron
有没有随机时间 - 和
sleep
解决方案 - 不是很好 - 我的想法是启动脚本每个午夜睡觉随机时间在脚本的开始处。
这里是更优雅的东西吗?
需要在随机时间每天运行一次shell脚本。 (所以每天在00:00-23:59之间进行一次)。随机时间每天运行一次shell脚本
我知道sleep
命令和cron
太多,但
cron
有没有随机时间sleep
解决方案 - 不是很好 - 我的想法是启动脚本每个午夜睡觉随机时间在脚本的开始处。这里是更优雅的东西吗?
至cron
最好的选择可能是at
通常,at
从标准读取命令输入,但您可以输入-f
的作业文件。
明智的是,您可以指定多种格式。也许在你的情况下,最方便的是
at -f jobs now + xxx minutes
了您的脚本给XXX从1
到1440
一个随机值(1440分钟,每天),而且jobs
包含所需命令被执行。
您可以使用cron来启动bash脚本,它产生伪随机时间戳和它给UNIX程序at
我看到你熟悉的bash和cron不够,所以at
将是一块蛋糕给你的。文档一如既往 “男人” 或者你可以尝试维基
如果您有at
命令,则可以合并cron
和at
。从cron每到半夜,下一个脚本
运行:
#!/bin/bash
script="/tmp/script.sh" #insert the path to your script here
min=$((24 * 60))
rmin=$(($RANDOM % $min))
at -f "$script" now+${rmin}min
以上将运行at
命令每一个午夜,并会在随机时间执行脚本。您应该检查您的crontab atrun
命令的启动频率。 (atrun
运行与at
一起存储的命令)
与sleep
方法相比的主要优点:此“存活”系统重新启动。
没有什么能阻止你运行sed来修补你的crontab作为你的程序所做的最后一件事,并且改变下一个开始时间。尽管如此,我还是睡不好。
我只是简单地在午夜启动脚本,而sleep
随机时间在0到86400秒之间。由于我的bash的$RANDOM
返回0到32767之间的数字:
sleep $((($RANDOM % 1440)*60 + ($RANDOM % 60)))