PHP在动态时间运行脚本?是否需要工作


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

我需要在动态时间(与数据库中的日期时间一致)运行脚本。有什么好主意吗?

的例子:

数据库在datetime字段中显示明天中午1,然后我想在明天中午运行脚本

一个非常简单的方法是让一个非作业每1分钟调用一个PHP脚本,并让它检查数据库中需要做的事情。如果现在需要做某事(),那么执行它并从数据库中删除。

你需要考虑像锁、进程堆叠、多进程等事情……使它更健壮。但如果你的需求很简单,这是一个简单的方法,使它工作。

添加到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中时被更新。