我需要在动态时间(与数据库中的日期时间一致)运行脚本。有什么好主意吗?
的例子:
数据库在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中时被更新。