繁体   English   中英

PHP在动态时间运行脚本? 为cron工作还是没有?

[英]PHP run scripts at dynamic times? Job for cron or no?

我需要在动态时间(与数据库中的日期时间一致)运行脚本。 任何想法如何做到这一点?

例:

数据库在日期时间字段中的明天中午1点说,那么我想明天中午运行脚本。

一个非常简单的方法是让cron-job每1分钟调用一次PHP脚本,然后让它检查数据库中需要完成的事情。 如果需要立即执行NOW(),请执行该操作,然后将其从数据库中删除。

您需要考虑诸如锁定,进程堆栈,多个进程等之类的内容,以使其健壮。 但是,如果您的需求很简单,那么这就是使其工作的简单方法。

将此添加到crontab中:

* * * * *   /usr/bin/php /path/to/my/script.php

并在/path/to/my/script.php中

<?php
$ts = time();

// Run for up to 50 seconds
while($ts + 50 > time())
{
   ... SELECT id, job_stuff FROM JobTable WHERE JobDate <= NOW() ...

   process job

   ... DELETE job_stuff FROM JobTable WHERE id = ...

   sleep(5);       
} 

注意,这并不可靠。 健壮的脚本将在锁定时抓取一条记录,将其更新为“正在处理”状态,对其进行处理,然后将其更新为“完成”状态。 这意味着多个进程可以同时工作(即使是偶然的),并且不能重复工作。 同样,这意味着一次故障不会使火车停下来。

另一种方法可能是使用脚本以固定的间隔检查数据库,并且一旦看到新作业,就为该脚本创建cron作业。 显然,您需要某种方法来确保将过程插入相关crontab后对其进行更新。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM