每天在随机时间运行一次shell脚本

时间:2013-06-01 14:28:31

标签: bash

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

我知道sleep命令,cron也知道,但

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

这里有更优雅的东西吗?

5 个答案:

答案 0 :(得分: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 :(得分:4)

cron的最佳替代方案可能是at

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

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

  • at -f jobs now + xxx minutes

您的脚本将xxx作为从11440的随机值(一天中1440分钟),jobs包含您要执行的命令。

答案 2 :(得分:4)

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

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

答案 3 :(得分:1)

您可以使用cron启动bash脚本,该脚本生成伪随机时间戳并将其提供给unix程序at

我看到你对bash和cron很熟悉,所以at对你来说将是小菜一碟。文档一如既往“man at”或者您可以尝试wiki

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

答案 4 :(得分:1)

没有什么可以阻止你运行sed来补丁你的crontab作为程序的最后一件事,只是改变下一个开始时间。我虽然睡不好觉。