cakeStart,从后端管理网页停止PHP脚本


cakeStart & Stop PHP Script from Backend Administrative Webpage

我试图创建一个网页,让我开始和停止一个PHP脚本。该脚本是站点后端的一部分,需要访问、读取数据、处理数据和更新脚本所在服务器上的数据库。此外,我希望网页允许管理员查看当前状态(运行或停止),甚至链接到脚本创建的日志。我开始学习PHP的exec、passthru和相关函数。这是正确的道路吗?还有其他更合适的方法吗?是否有可能以平台不可知的方式做到这一点?我在Windows上开发一个LAMPP+CakePHP堆栈,并希望该功能存在于我选择的任何网站主机上。

我在最近的一份工作中就这样做过,但对你来说可能有点过头了。我做了一个作业处理器,它基本上在数据库中设置了2个表,至少2个对象,至少2个控制器。

第一部分是作业处理单元,它由一个作业处理器控制器组成,它管理启动或继续作业的请求,并带有两个活动模式JobQueue和job。您可以删除队列,但在这样的系统中使用队列总是实用的,因此您可以说可以同时执行2,3,4个作业。

队列只是这样,它是一个插槽,有几个作业附加在它上面,它有一个队列状态来确定它现在是否正在运行。

job是一个虚拟对象,它映射到一个描述必须完成的工作的job表。在我的实现中,我创建了一个接口,必须实现到被调用的控制器和数据库中的字段+类型。Job实例化要调用的控制器类(不是作业处理器控制器,而是管理要执行的操作的另一个控制器),并调用其中的一个方法来启动任务处理。

现在,为了变得棘手,我强迫我的系统在专用服务器上运行,因为我不想让任务加载主服务器或阻塞Apache的处理队列。所以我有两台服务器,我的Queue类负责通过ip地址调用另一台服务器上的页面,以在该服务器上运行作业。当任务完成后,它使用HTTP请求回调自己以重新启动处理并执行下一个任务。如果没有任务,那么它就会正常死亡。

这样做的好处是,它不需要一个cronjob(只要你的脚本是超级稳定的,不会崩溃),因为它会被你触发,当你想要它,然后你可以让它离开,它调用自己与fsockopen触发另一个页面视图,触发下一个作业。

<<p> 工作单位/strong>

重要的是要明白,如果你的作业非常大,你应该分割它们。我使用"工作单元"的原则来描述工作中必须多次完成的一个部分。然后队列处理器也变成了一个时间管理器,这样它就可以检测到一个作业是否花费了超过X秒的时间,它会简单地将其余的步骤推迟到以后,然后调用自己并在它所处的位置继续。这样,你就不需要"设置时间限制",也不会在一个30秒的脚本执行时阻塞你的服务器。

我希望这对你有帮助!

要运行一个连续运行的脚本,您需要考虑:

  • 你的php脚本应该启动CLI(命令行)由作业调度程序,如cron或其他东西。不要忘记你的web服务器配置在脚本执行时定义了超时。

  • 为了一天24小时运行,也许你会想象实现一个无限循环。在这种情况下,您可以编写一个类似jobIsActive的测试,它在每个循环中读取文件或数据库中是否应该执行作业。如果您点击按钮,只需更改作业状态(更新文件,数据库…)。你的两个按钮可以停止治疗或激活它,但不能停止无限循环。

  • 无限循环不是最优雅的解决方案,为什么不在cron选项卡中写一个条目来每天晚上执行作业,然后点击一个按钮就可以手动启动它。