cron作业或PHP调度程序

时间:2009-08-12 18:54:17

标签: php mysql windows-vista cron scheduled-tasks

我使用MYSQL作为我的数据库,PHP作为我的编程语言。我想运行一个cron作业,该作业将持续到当前系统日期与我的数据库表中名为“PROJECT”的“deadline(date)”列匹配。一旦日期相同,就必须运行更新查询,这将把状态(项目表的字段)从“打开”更改为“关闭”。

我不确定cron作业是最好的方法,还是我可以使用触发器,或者可能是其他的东西。我也使用Apache作为我的网络服务器而我的操作系统是windows vista。

这也是最好的方法吗? PHP调度程序或cron作业或任何其他方法?谁能开导我?

6 个答案:

答案 0 :(得分:4)

我认为你的概念需要改变。

PHP无法安排工作,MySQL也无法安排工作。 MySQL中的触发器在发生mysql查询时执行,而不是在特定时间执行。既不

此限制通常不是Web开发中的问题。原因是因为您的PHP应用程序应该控制进出的所有数据。通常,这仅表示向用户或其他程序显示该数据或其他格式的HTML。

在你的情况下,你可以这样思考。截止日期是设定日期。您可以将其视为数据,并将其保存到数据库中。如果发生截止日期并不重要,那么您在数据库中发送的数据将被正确查看。

当您的应用程序发出请求时,检查截止日期是否过去,如果是,则显示项目已关闭 - 或者在显示之前更新项目已关闭。

没有理由独立更新PHP应用程序的数据。

通常,您要安排的唯一事项是在加载方面会影响应用程序的作业,或者只需要执行一次,或者并发或时间成问题的作业。

在你的情况下,这些都不适用。

PS:我没有尝试过PHPscheduler,但我猜它不是真正的调度程序。 Cron是一个守护进程,直到给定任务在其队列中到期,执行任务,然后休眠直到下一个到期(至少那是它在当前算法中的作用)。如果没有套接字和fork扩展,PHP不能像特殊设置那样做。所以PHPscheduler很可能只是检查一个任务的日期是否已经过期,每次加载一个网页(每当PHP执行一个页面时)。这与您只检查项目上的日期是否已过期没有任何不同,没有PHPScheduler的开销。

答案 1 :(得分:1)

我总是会为任何相关的日程安排找一份cron作业。

最大的好处是你可以回复信息,然后通过电子邮件发送给你。

一旦你开始使用cronjobs,就会发现它很难停止。

答案 2 :(得分:1)

cron本身在vista中不存在,但是存在的是标准的Windows调度管理器,您可以使用命令行运行,例如“php -q -f myfile.php”,它将在以下位置执行php文件给定的时间。

你也可以使用cron程序的端口,那里有很多。

如果它对第二个并不重要,那么任何Windows调度应用程序都会这样做,为了简单起见,请务必在PATH变量中使用PHP bin路径。

答案 3 :(得分:1)

对于Windows CRON作业,我不能推荐PyCron

答案 4 :(得分:0)

PHPscheduler ..R他们不比cronjobs好吗?我认为crons将独立于应用程序,因此如果必须更改主机将会很困难。我不是很确定。如果有人可以对此发表评论,那将是很棒的!谢谢!

答案 5 :(得分:0)

虽然CRON和Windows计划任务是调度作业/任务定期运行的经过验证的真实方法,但有些用例在CRON / Windows中具有不同的计划任务可能会变得乏味。即,当您希望让用户安排要运行的内容时,或者您希望用户更喜欢简单/可维护性/可移植性/等或上述所有内容时。

如果我不想将CRON / Windows用于计划任务,我会在应用程序中构建一个任务调度系统。这仍然需要安排1个CRON作业或Windows任务。我们的想法是在数据库中存储作业详细信息(作业名称,作业属性,上次运行时间,运行间隔,以及对您的实施很重要的任何其他内容)。然后,您可以在CRON或Windows中安排“主”作业,该作业可以为您处理所有其他作业。你需要这个主要工作至少在最短的时间间隔内运行;如果您希望能够安排每分钟运行的作业,则主作业需要每分钟运行一次。

然后,您可以轻松地在PHP后台启动每个预定作业(如果需要)。在内存受限系统中,您可以monitor memory usage或跟踪PID(各种方法)并限制在给定时间运行的N个作业。

我使用这种方法取得了很大的成功,YMMV可以根据您的需求和实施情况而定。

相关问题