2010-03-11 116 views
2

我有一个数据库在MySQL中有时间条目。有超过1000个时间条目。我想提取时间并准确运行一个PHP脚本,当时..连续运行PHP脚本

我试图运行一个PHP脚本不断检查时间,但我的服务器不允许运行脚本超过60秒。

编辑。我必须每秒检查一次数据库。有其他选择吗?

+0

如何通过cron作业运行脚本? – jamieb

+0

Cron作业是个好主意,但我也必须运行查询来检查数据库和当前时间,这将花费太多时间。有没有其他方法可以这样做。 – nicky

+0

您可以使用set_time_limit(0);让你的php脚本永远运行,但是大约1天后你的脚本将会使用超过1GB的内存。 PHP的内存管理器是非常原始的,如果你想长时间运行1个进程,你将不得不使用java或编写一些非常肛门的C++。 – rook

回答

3

试试Unix的cron

3

您需要一些外部服务来执行脚本。在Unix上,这将是cron。在Windows中,使用Task Scheduler

1

你有没有想过把你的进程写成服务器守护进程。它会启动并永久运行在一个while循环中。每隔几分钟或无论如何,您都希望能够检查下一个x分钟的运行时间。您排队您的请求,并且每当您发现需要运行的脚本时,您就会启动它。我不认为cron是你想要的,因为你正试图在任意时间安排未来的事件......而且我确定这正是你现在用来每秒钟检查db的情况。

+0

是的。我必须每秒检查一次数据库。 有没有其他解决方案。因为一次又一次的查询会变得非常麻烦。 – nicky

+0

那么你只需每检查一次X分钟,就可以在下一个X分钟内运行它。例如: 从时间

0

您必须使用sleep(arg)函数来暂停PHP脚本一段时间,然后继续。

sleep(50); //Pauses 

myFunction(); //Runs after the pause 

例如,这会将脚本暂停50秒。

+0

只有当max_execution_time参数设置为一个非常高的值(我不确定绝对最大值是多少......),还有'set_time_limit()'函数和其他可能的变量时,该解决方案才能工作。例如,您希望脚本运行整整一个星期或一个月 - 例如,它不是一个有效的解决方案,但它可以在延迟很短的循环中执行,以缩短执行时间。 –

0

写PHP脚本从数据库中读取和条目添加到你的crontab,使在期望的时间

0

运行保持运行的进程的脚本是不是一个很好的解决方案,这不仅是因为你需要以确保它保持运行。想必你知道下一次事件何时会发生 - 所以使用'atd'来安排它 - 当触发脚本时也应该工作在何时以及如何安排下一个工作。

这确实意味着作业是链接的 - 并且失败会打破链条,atd的大多数实现的粒度也可能相当高。

您可能想要使用像Nagios这样更复杂的调度工具或像DJB的daemontools或Oracle的OPMN这样的过程监控类型方法。

C.

0

DJB的daemontools的是伟大的。显然,系统和/或Upstart,虽然Remnant扮演一个真正的wanker。