我正在尝试在 PHP 和 MySQL 中创建一个站点,其中一个人被分配为另一个人执行任务。分配给完成任务的时间段是 72 小时。
如果完成,其他人将确认。如果没有,我想采取某些措施(例如阻止他的帐户、发送电子邮件、将任务分配给其他人等)。最好的方法是什么?
随着倒计时逐秒运行,我想我必须每秒运行一个脚本。
您可以使用 cronjob 检查截止日期并最终发送电子邮件、阻止帐户等...
虽然,如果您确实需要每秒精度,您可能希望使用具有“无限”循环的单个进程并在其间进行一些睡眠。
如果您的服务器来自 *nix 系列,您可以使用 cron/crontab。请参阅使用示例:http ://en.wikipedia.org/wiki/Cron和https://help.ubuntu.com/community/CronHowto
如果我需要做类似的事情,我可能会按照以下步骤进行:
创建活动并计算截止日期
设置一个 cronjob 在截止时间运行
cronjob 检查事件状态并采取行动
我认为这将是最有效的方法。
我正在尝试在 PHP 和 MySQL 中创建一个站点,其中一个人被分配为另一个人执行任务。分配给完成任务的时间段是 72 小时。
这些可能只是 db vales
表任务
.id
.user_assigned
.strart_date
.end_date
.status
.desc
如果完成,其他人将确认。如果没有,我想采取某些措施(例如阻止他的帐户、发送电子邮件、将任务分配给其他人等)。最好的方法是什么?
同样,具有分配工作布局的某种形式的管理面板,应该要求“工人”将工作发布为“完成”,然后“管理员”可以确认这一点。这都可以通过 db ''table_task.status'' 中的值进行管理
随着倒计时逐秒运行,我想我必须每秒运行一个脚本。^-- 服务器自杀
最多每小时运行一次 cron。如果你有 1000 个用户。然后这个 cron 将每秒运行 1000
在一小时内,60000*60
如果您需要显示时间,请使用某种形式的 jQuery。有很多时钟脚本。
很少有事情必须立即发生。如果你已经等了 72 小时才发生某件事,那么在几分钟内发生的动作就没有那么重要了。
如果你真的希望事情发生得如此之快,而且你在潜在事件之间总是有很长的时间,我建议的一件事是不要使用 cronjob,而是更类似于@muc 建议的东西 - 一个定期运行的脚本在一个将继续运行的shell脚本中(只需在最后执行'exec $0'以在脚本退出时重新运行脚本)。
检查数据库的脚本(例如在 PHP 中)也不必一直运行。每当它发现将在几秒钟内发生的事情时,它就会休眠直到下一个事件将要发生。当它醒来时,它可以再次检查它是否仍然是必需的,然后执行相关的工作。
<?php
$jobId = whatToRunNext();
if (! $jobId) {
exit;
}
$secsToNextJob = howLongToNextJob($jobId);
if ($secsToNextJob > 0) {
sleep($secsToNextJob);
if (! jobStillRequired($jobId)) {
exit;
}
}
doJob($jobId);
exit;
将它包装在一个 shell sript 中,让它保持运行,也许在 bash 脚本中稍微休眠一下,你会很好 - 虽然不是在一个非常长时间运行的 CPU 杀死循环中。