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

Nem*_*emo 3 bash

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

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

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

这里的东西更优雅吗?

jm6*_*666 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
Run Code Online (Sandbox Code Playgroud)

以上将at每隔午夜运行该命令,并将在随机时间执行您的脚本.您应该检查crontab atrun命令的启动频率.(atrun运行与之一起存储的命令at)

与该sleep方法相比的主要好处:这"幸存"系统重启.


Rin*_*g Ø 5

最好的替代品cron可能是at

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

在时间上,您可以指定许多格式。也许对您而言,最方便的方法是

  • at -f jobs now + xxx minutes

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


gle*_*man 5

我会简单地在午夜启动你的脚本,并sleep在 0 到 86400 秒之间的随机时间启动。由于我的 bash$RANDOM返回一个介于 0 和 32767 之间的数字:

sleep $(( ($RANDOM % 1440)*60 + ($RANDOM % 60) ))
Run Code Online (Sandbox Code Playgroud)