php上的Sleep函数

php上的Sleep函数,php,scheduling,sleep,Php,Scheduling,Sleep,作为使用cron作业的可能替代方法,我发现了sleep函数。我以前从未用过这个 如果我告诉我的脚本在一种循环中运行,在这个循环中我有这样一条指令 # sleeps for 86400 seconds or one day sleep(86400); 我的脚本会在1天后再次启动吗?即使在这段时间内你不再在我的网络浏览器上访问它? 我认为这是不可能的,但我是来询问专家的。如果您通过web浏览器访问脚本,它将在30秒后终止 如果在命令行上启动PHP脚本,这可能会起作用。脚本将超时。您需要设置它,以便

作为使用cron作业的可能替代方法,我发现了sleep函数。我以前从未用过这个

如果我告诉我的脚本在一种循环中运行,在这个循环中我有这样一条指令

# sleeps for 86400 seconds or one day
sleep(86400);
我的脚本会在1天后再次启动吗?即使在这段时间内你不再在我的网络浏览器上访问它?
我认为这是不可能的,但我是来询问专家的。

如果您通过web浏览器访问脚本,它将在30秒后终止


如果在命令行上启动PHP脚本,这可能会起作用。

脚本将超时。您需要设置它,以便它不会使用超时。

它会工作,但您的“启动时间”会发生漂移。假设您的作业运行10秒,然后睡眠86400,再运行10秒,睡眠86400,等等。。你在第一天的午夜开始。第二天是12:00:10,第三天是12:00:20,等等


您可以在内部进行一些复杂的计算,以计算出运行所需的时间,并从下一次睡眠调用中减去该时间,但在这一点上,为什么不使用cron呢?使用cron,脚本将在每次运行后退出,清理内存和使用的资源。使用sleep方法时,您必须非常小心,不要在某个地方泄漏资源,否则事情最终会陷入停顿。

我以前也遇到过类似的问题,找到了一个php cron解析类,它允许您执行类似于运行cron的php。如果您没有直接运行cron的权限,则可以将其绑定到站点上的常用脚本

实际上,我将此脚本用作更大的cron作业脚本的一部分:

  • cron作业每小时运行一次
  • 每个子cron的xml文件,带有类似cron的时间组件(即-***/2***php/home..)
  • 如果当前时间满足sub-cron time组件的条件,则将运行的sub-cron脚本
  • 设置了一个用户界面,这样我就不必从主cron中手动添加/删除子cron

  • cronParser类是

    有很多正确答案,但是:使用sleep()意味着您的脚本将继续运行,并继续使用内存。提高默认超时30秒会起作用,但同样,这是个坏主意。我建议您使用crontasks。

    我不会这样做。如果作业是常规任务,我会使用(链接)作业;如果作业是在脚本运行时添加的,我会使用(链接)作业

    例如,cron允许您在每天下午1点运行定期作业,而at允许您安排作业在现在+1天内运行一次


    如果你选择沿着那条路线走,我已经为at队列写了一封信。它可以在GitHub上使用。根据我的经验,以这种方式使用PHP的主要问题不是web服务器超时(在服务器和平台上有不同的处理方法),而是内存泄漏


    简单的PHP代码往往会泄漏大量内存;在我做了一些分析并放置了一些
    unset
    s之后,我编写的大多数脚本能够完成数百倍的工作。我从来没能用这种方式防止所有的泄漏。我还听说标准库中存在内存泄漏,如果这是真的,那么就不可能编写在循环中运行很长时间的守护进程。

    也有。也许在特定时间醒来更有用…

    这就是为什么发明了合法的cron作业。只需使用
    crontab
    。使用PHP脚本来做这件事将是非常不可靠的,有缺陷的,而且时间安排不当


    希望这是有见地的。

    我的php.ini设置为120秒,无论什么原因,我都将从命令行运行脚本,我仍然有疑问。。不管工作与否。。无论如何,谢谢。这完全取决于网络服务器的设置。声明它将在30秒后终止在某些情况下是正确的,但这不是你可以依赖的。太好了!!谢谢,实际上我正在使用crontab,它工作得很好。我只是问了一下,因为我的工作中总有一种事情要发生。谢谢你的解释。!!!这就是我想象的,内存泄漏和一切停止工作。我运行了大量的PHP守护进程来循环。不过,当有工作要做时,我会用叉子叉这个过程。@Treffynnon:好主意。那效果如何?您是否有零净内存使用率增长?还有,性能的影响有多大?对于每次迭代工作量相对较少的紧密循环是否可行?恐怕我无法给出任何数字。我没有注意到任何内存占用等,虽然在测试或生产。根据我的经验,无论你多么小心,PHP总能找到一个漏洞来漏洞。可能是库,可能是我只是一个C程序员,但事实就是这样。