我需要在动态时间运行脚本(与数据库中的日期时间一致)。任何想法如何实现这一目标?
示例:
数据库说明天中午1点在日期时间字段,然后我想明天中午运行脚本。
答案 0 :(得分:1)
一种非常简单的方法是每1分钟让一个cron-job调用一个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);
}
注意,这不健全。一个健壮的脚本会在锁定时获取记录,将其更新为“处理”状态,处理它并将其更新为“完整”状态。这意味着多个进程可以同时工作(即使是偶然的)而不是重复的工作。此外,这意味着单一故障不会使列车停止。
答案 1 :(得分:0)
另一种方法可能是有一个脚本以reguiar间隔检查数据库,一旦看到新作业,就为该脚本创建cron作业。您显然需要某种方法来确保在将流程插入相关的crontab后更新您的流程。