我有一个调度应用程序,它必须根据用户设置的时间表执行特定任务。这意味着PHP脚本必须不断检查数据库并与当前时间进行比较,看看是否有任何匹配。显然,我无法运行无限循环。
其他选项包括cron job。但是,由于我在虚拟主机服务器上运行所有这些,我不确定是否可以根据cronjob安排PHP脚本每隔几秒运行一次。我是否正确,还有另一种选择吗?或者我可以在虚拟主机上执行cronjobs(我不具备很大的灵活性)?
答案 0 :(得分:0)
你可以在无限循环中运行php脚本,但我不确定这是否真的有意义。
您可以在php脚本中操作php设置以删除最长执行时间。关于cronjob我会直接调用php5可执行文件来运行你的脚本,有一些逻辑可以避免双重执行。例如。将当前时间写入锁定文件,因此,如果上次超过让我们说5分钟,则脚本崩溃并应立即启动。如果不是退出。
答案 1 :(得分:0)
Cron会让你按分钟安排,而不是第二。因此,您的脚本将需要处理整整一分钟(或更长时间)并在超时后退出,以便让下一个循环(由cron启动的任务)执行。但是,您可能会遇到重叠问题,因此您的脚本必须首先检查其自身的另一个实例是否已在运行。
您可能想要检查一下:http://kvz.io/blog/2009/01/09/create-daemons-in-php/了解如何使PHP脚本成为守护进程(因此,在后台执行而不依赖于Cron)。
您是否有可能将治疗挂钩到您的用户的“插入”操作? (即每当有人向队列添加作业时)。如果是,您可以使用后台进程(守护进程,请参阅上面的链接),它将侦听Unix套接字,并且您的添加作业操作将发布到此套接字中。这样可以避免必须从数据库中主动和重复地进行轮询,以检查是否已注册新作业。