2013-06-01 146 views
2

需要在随机时间每天运行一次shell脚本。 (所以每天在00:00-23:59之间进行一次)。随机时间每天运行一次shell脚本

我知道sleep命令和cron太多,但

  • cron有没有随机时间
  • sleep解决方案 - 不是很好 - 我的想法是启动脚本每个午夜睡觉随机时间在脚本的开始处。

这里是更优雅的东西吗?

回答

4

cron最好的选择可能是at

通常,at从标准读取命令输入,但您可以输入-f的作业文件。

明智的是,您可以指定多种格式。也许在你的情况下,最方便的是

  • at -f jobs now + xxx minutes

了您的脚本给XXX从11440一个随机值(1440分钟,每天),而且jobs包含所需命令被执行。

1

您可以使用cron来启动bash脚本,它产生伪随机时间戳和它给UNIX程序at

我看到你熟悉的bash和cron不够,所以at将是一块蛋糕给你的。文档一如既往 “男人” 或者你可以尝试维基

http://en.wikipedia.org/wiki/At_(Unix)

10

如果您有at命令,则可以合并cronat。从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方法相比的主要优点:此“存活”系统重新启动。

1

没有什么能阻止你运行sed来修补你的crontab作为你的程序所做的最后一件事,并且改变下一个开始时间。尽管如此,我还是睡不好。

4

我只是简单地在午夜启动脚本,而sleep随机时间在0到86400秒之间。由于我的bash的$RANDOM返回0到32767之间的数字:

sleep $((($RANDOM % 1440)*60 + ($RANDOM % 60)))