Shell脚本随机Cron作业

时间:2013-12-16 00:21:19

标签: shell cron

我设置了一个cronjob,每5分钟调用一次myscript.sh,然后在30秒到3秒之间调用一个php文件,我不明白为什么平均Interval是05:09。

我想每4-8分钟拨打一次cron2_.php,但没有机会实现这一目标。

坦克你。

Cron Job:*/5 * * * * myscript.sh

Shell脚本:

#!/bin/sh
# Grab a random value between 60-180 or ( between 30sec and 3 minutes )
value=$RANDOM
while [ $value -gt 180 ] || [ $value -lt 30 ] ; 
do
  value=$RANDOM
done

# Sleep for that time.
sleep $value

# Exectue Cron.
echo "Exectued on:$(date)" >> public_html/log_file.txt
exec php -f public_html/cron2_.php

以下是2小时的执行时间: 平均间隔 - > 05:09

  Execution Time      Interval Min:Sec
    13:02:52            00:00
    13:07:06            04:14
    13:11:35            04:29
    13:17:34            05:59
    13:21:55            04:21
    13:26:54            04:59
    13:32:00            05:06
    13:35:50            03:50
    13:42:44            06:54
    13:47:03            04:19
    13:51:26            04:23
    13:56:48            05:22
    14:01:53            05:05
    14:07:42            05:49
    14:12:15            04:33
    14:16:22            04:07
    14:23:01            06:39
    14:27:17            04:16
    14:32:21            05:04
    14:35:57            03:36
    14:42:14            06:17
    14:45:44            03:30
    14:52:52            07:08
    14:56:50            03:58
    15:02:57            06:07
    15:06:43            03:46
    15:12:26            05:43
    15:16:29            04:03
    15:22:00            05:31
    15:25:35            03:35
    15:31:51            06:16
    15:37:51            06:00
    15:42:56            05:05
    15:47:32            04:36
    15:50:36            03:04
    15:55:45            05:09
    16:02:15            06:30
    16:06:10            03:55
    16:11:11            05:01
    16:15:56            04:45
    16:21:58            06:02
    16:25:56            03:58
    16:31:09            05:13
    16:37:06            05:57
    16:42:30            05:24
    16:45:36            03:06

1 个答案:

答案 0 :(得分:3)

您希望脚本每4到8分钟运行一次。让我们说平均每6分钟就要执行一次。在这种情况下,将crontab行设置为:

*/6 * * * * myscript.sh

接下来,在您的脚本中,将随机延迟设置为0到2分钟:

sleep $(($RANDOM % 120))

考虑两种极端情况。首先,假设一个作业等待最多2分钟,而下一个等待最少0分钟。他们执行的时间是4分钟。对于第二种情况,请考虑相反的情况:第一个作业等待最少0分钟,第二个作业等待最多2分钟。在这种情况下,执行时间为8分钟。因此,这种方法可以等待4到8分钟,平均等待时间为6分钟。