【发布时间】:2011-08-08 20:39:06
【问题描述】:
我们可以通过PHP脚本配置cron作业的时间间隔,这样时间间隔不应该手动设置,而是通过PHP脚本,无论是从数据库中获取时间间隔还是固定时间间隔(但从PHP代码中)。
提前致谢
【问题讨论】:
我们可以通过PHP脚本配置cron作业的时间间隔,这样时间间隔不应该手动设置,而是通过PHP脚本,无论是从数据库中获取时间间隔还是固定时间间隔(但从PHP代码中)。
提前致谢
【问题讨论】:
我认为让您的应用程序控制事件的频率而不是 cronjob 会更好。让 cronjob 每分钟运行您的应用程序的某个操作。例如,该操作会检查名为 cronjobs 的数据库表,并运行由频率数或时间戳标记为运行的作业。
如果您这样做,您可以从任何地方以编程方式添加新作业,例如通过 cronjob 接口。 该解决方案更易于维护、测试和记录。
【讨论】:
有两种方法。要么在每次更改所需值时重新创建 crontab,要么定期触发 cron 作业,例如每分钟,并从脚本中测试开始条件。
【讨论】:
如果有足够的服务器权限,您应该能够使用来自 PHP 脚本的系统级调用,使用 system() 来执行此操作。
【讨论】:
最好的办法是编写一个能够创建crontab-文件的 PHP 脚本(并以足够的权限运行脚本)。
site 提供了一个非常好的教程。
但是,对cron 的依赖将使您的代码依赖于支持cron 的平台。因此,另一种解决方案是在 PHP 本身中实现定时执行逻辑(即循环代码,并自己检查时间)。
您可以通过创建一个可以提供脚本的Scheduler-interface 来组合上述两种解决方案,并确保它在适当的时间执行。这样你就可以在 linux 上使用cron 来实现它,但在 Windows 上用另一种方式:
interface Scheduler {
function schedule($script);
}
class CronScheduler {
function schedule($script) {
append_cronjob($script);
}
}
不过,我在这里可能做得过火了。
【讨论】:
如果您想这样做,我建议您改用 Message Queue Beanstalkd。它可以进行延迟放置程序化并且非常快。我建议你使用pheanstalk 与 Beanstalkd 交谈。
【讨论】: