每15秒后获得一次

时间:2010-09-22 06:00:04

标签: php hosting cron dedicated betfair

即使在我的专用服务器上,也无法将cron时间设置为不到1分钟。 我需要它每15秒运行一次因为它调用betfair api并且计算高度依赖于时间。 请指教。

3 个答案:

答案 0 :(得分:11)

如果您需要每15秒调用一次作业,请不要使用cron。 cron旨在用于请求稍后完成的工作。

相反,在父完成作业后,睡眠15秒然后调用子脚本,然后退出。子脚本可以完成它的工作,睡眠15秒然后调用下一个脚本。泡沫,冲洗,重复。

如果您的服务器没有时间限制,那么您甚至不需要生成子脚本。只要睡15秒,做你的事,睡15秒,做下一件事,依此类推。睡眠脚本不消耗CPU,但它消耗RAM。但这比循环主机的PID更好;这可能会让你的主人感到不安。

答案 1 :(得分:7)

Cron只允许你以每分钟一次的速度运行。

我要做的是在你的剧本中做15秒的时间。

  • 每分钟执行一次父脚本。
  • 在该脚本存在且每个周期开始之前,每15秒执行一次子脚本。

答案 2 :(得分:1)

Cron是一个作业调度程序,它具有至少一分钟的分辨率。如果您需要更精细的分辨率,您必须找到另一个计划工具或自己动手。

我过去使用的一个如下。您配置了所需的间隙和最小间隙,以下脚本将每N秒执行一次有效负载。请注意,这不是一个简单的“每次迭代之间等待N秒”调度程序。它实际上是在前一个开始之后的N秒开始,而不是在结束之后。

最小间隙是这样的,如果你的有效载荷超过N秒,它就不会连续运行。如果你希望它在那种情况下连续运行,只需将最小间隙设置为0。

执行此操作的代码如下:

#!/usr/bin/bash

payload() {
        if [[ $1 -eq 1 ]] ; then
                echo "Sleeping for  1 second  at $(date +%H:%M:%S)."
        else
                if [[ $1 -lt 10 ]] ; then
                        echo "Sleeping for  $1 seconds at $(date +%H:%M:%S)."
                else
                        echo "Sleeping for $1 seconds at $(date +%H:%M:%S)."
                fi
        fi
        sleep $1
        echo "               Finished at $(date +%H:%M:%S)."
        echo
}

gap=10
mingap=3
for i in {1..20} ; do
        next=$(($(date +%s) + ${gap}))
        payload ${i}
        if [[ ${mingap} -ne 0 ]] ; then
                sleep ${mingap}
        fi
        while [[ $(date +%s) -lt ${next} ]] ; do
                sleep 1
        done
done

有效负载不是逻辑的一部分,它只是我用于调试目的的东西。您可以用任何你想要的东西替换它。此外,for循环也是一个示例。您可以使用无限循环替换它,或者让脚本仅执行(例如)60分钟的迭代,并且每小时cron启动一个新的脚本实例。

示例运行如下。您可以看到有效载荷每十秒钟运行一次(由于sleep的变幻莫测,奇数十一秒),直到需要超过七秒才能完成。那时,最小差距开始了。

Sleeping for  1 second  at 14:36:08.
               Finished at 14:36:09.

Sleeping for  2 seconds at 14:36:18.
               Finished at 14:36:20.

Sleeping for  3 seconds at 14:36:28.
               Finished at 14:36:31.

Sleeping for  4 seconds at 14:36:39.
               Finished at 14:36:43.

Sleeping for  5 seconds at 14:36:49.
               Finished at 14:36:54.

Sleeping for  6 seconds at 14:37:00.
               Finished at 14:37:06.

Sleeping for  7 seconds at 14:37:10.
               Finished at 14:37:17.

Sleeping for  8 seconds at 14:37:20.
               Finished at 14:37:28.

Sleeping for  9 seconds at 14:37:31.
               Finished at 14:37:41.

Sleeping for 10 seconds at 14:37:44.
               Finished at 14:37:54.

Sleeping for 11 seconds at 14:37:57.
               Finished at 14:38:08.

Sleeping for 12 seconds at 14:38:11.
               Finished at 14:38:23.

Sleeping for 13 seconds at 14:38:27.
               Finished at 14:38:40.

Sleeping for 14 seconds at 14:38:43.
               Finished at 14:38:57.

Sleeping for 15 seconds at 14:39:00.
               Finished at 14:39:15.

Sleeping for 16 seconds at 14:39:18.
               Finished at 14:39:34.

Sleeping for 17 seconds at 14:39:38.
               Finished at 14:39:55.

Sleeping for 18 seconds at 14:39:58.
               Finished at 14:40:16.

Sleeping for 19 seconds at 14:40:19.
               Finished at 14:40:38.

Sleeping for 20 seconds at 14:40:41.
               Finished at 14:41:02.