Cronjob在给定的时间间隔

时间:2014-02-13 17:25:51

标签: python cron raspberry-pi

我有一个python脚本,可以在树莓上加载一个网页。

此脚本必须在启动时运行,然后每15分钟运行一次。将来会有很多这样的,可能是1000甚至更多。目前我正在使用cronjob进行此操作,但问题是所有1000个覆盆子会在同一时间连接到网页(加上减去几秒钟,因为他们从网络上获取精确的时钟)这将是好的无论何时,在上次运行15分钟后执行命令。我喜欢cronjob解决方案,因为我没有在后台运行,所以它只是执行它的工作,然后结束了。

另一方面,cronjob只关注分钟,而不是秒,所以即使我在这15分钟内分散了1000个pi,我仍然会每分钟同时向网页发出大约80个同时请求。 / p>

有一个很好的解决方案吗?

2 个答案:

答案 0 :(得分:1)

您可以使用time模块完全在python中实现它:

import time

def main():
    while True:
        # Save time before starting
        start = time.time()
        # Run you job
        do_task()
        # Estimate how much time the task took (end-start)
        delay = time.time()-start
        # Wait for next 15 mins (counted from start, not from end)
        time.sleep((15*60)-delay)

if __name__ == "__main__":
    main()

等待sleep()的脚本不应占用太多CPU(如果有的话)。可能是循环仍然在很长一段时间内缓慢移动,但可能对于网络提取是可接受的。

答案 1 :(得分:0)

在执行命令之前,您始终可以将unix命令sleep xx添加到cronjob中。

示例:* / 15 * * * *(睡眠20; /root/crontabjob.sh)

现在这项工作将每15分20秒(00:15:20,00:30:20),00:45:20运行....)