我正在尝试创建一个允许我启动和停止PHP脚本的网页。该脚本是站点后端的一部分,需要访问,读取数据,处理数据以及更新脚本所在服务器上的数据库。此外,我希望网页允许管理员查看当前状态(正在运行或已停止),甚至链接到由脚本创建的日志。 我开始走下去学习PHP的exec,passthru和相关函数的路径。这是正确的道路吗?还有其他方法可以做到这一点吗?是否有可能以平台不可知的方式做到这一点?我正在开发Windows中的LAMPP + CakePHP堆栈,并希望在我选择的任何虚拟主机上存在这些功能。从后端管理页面启动和停止PHP脚本
回答
我在最近的工作中已经完成了这项工作,但这对您来说可能是矫枉过正。我做了一个作业处理器,它基本上在数据库中设置了2个表格,最少2个控制器,最少2个控制器。
第一部分是作业处理单元,它由作业处理器控制器组成,它负责管理启动或继续作业的请求,并附带两个activerow模型JobQueue和Job。你可以删除这个队列,但是在这样的系统中排队是非常实用的,所以你可以说2,3,4个任务可以一次执行。
这个队列只是它的一个插槽,它连接了几个作业,它有一个队列状态来确定它是否正在运行。
作业是一个虚拟对象,映射到描述必须完成的作业表。在我的实现中,我创建了一个必须在被调用的控制器中实现的接口和一个字段+数据库中的一个类型。 Job实例调用控制器类来调用(而不是作业处理器控制器,另一个控制器来管理操作),并调用其中的方法来启动任务处理。
现在,变得棘手,我强迫我的系统在专用服务器上运行,因为我不希望任务加载主服务器或堵塞Apache的处理队列。所以我有两台服务器,我的Queue类负责通过一个IP地址调用另一台服务器上的一个页面来专门在该服务器上运行作业。作业完成后,它会使用HTTP请求重新启动处理并执行下一个任务。如果没有任何工作,那么它就会正常死亡。
这样做的好处是它不需要cronjob(只要你的脚本超稳定并且不会崩溃),因为它在你想要的时候被你触发,然后你可以放手并用fsockopen调用自己以触发另一个触发下一个作业的页面视图。
工作单位
明白,如果你的工作是非常大的,你应该分割他们是很重要的。我使用“工作单位”的原则来描述工作必须进行多次的1个部分。那么队列处理器成为了经理的时间也让他能够检测一个工作比X秒花了,它只会推迟后的剩下的步骤并调用自身回来,继续进行他的。这样,您不需要“设置时间限制”,并且在30秒的脚本执行时不会阻塞服务器。
我希望这有助于!
感谢您的回答。这听起来像我正在做的事情的矫枉过正。我只想执行以下操作:每24小时根据某些条件从我的数据库中选择一些行数,更新数据库中每行的字段,然后在24小时内再次重复。我认为最好的办法是在服务器上连续运行脚本。最后,我希望能够使用管理员可访问的网页上的两个按钮启动该脚本,另外,我希望网页显示脚本的状态(正在运行/已停止)。 – reggie3
你最好的选择是依靠具有cron功能的服务器。每个CPANEL像服务器都有CRON命令,它允许您运行CLI脚本或使用一点wget --remove-after URL让您像脚本一样调用脚本。你也可以使用外部cron,比如http://webcron.org/在你的网站上触发一个脚本,我“认为”它是免费的,我从来没有用过它们...... –
要运行的持续运行脚本,你需要考虑到:
你的PHP脚本应该由作业调度比如cron或者其他什么东西被推出,CLI(命令行)。不要忘记,您的Web服务器配置定义了执行脚本的超时。
要每天运行24小时,也许您想象实现无限循环。在这种情况下,您可以编写一个像jobIsActive这样的测试,如果应该执行作业,它可以在每个循环中读入文件或数据库中。如果你点击按钮,只需更改作业状态(更新文件,db ...)。你的两个按钮可以停止治疗或激活它,但不会停止无限循环。
无限循环并不是最优雅的解决方案,为什么不在cron选项卡中编写条目以便每晚执行作业,并且单击按钮可以手动触发它。
- 1. 启动/停止脚本刷新页面
- 2. 启动和停止记录终端输出从bash脚本
- 3. 自动启动和停止node.js脚本
- 4. 自动启动和停止node.js脚本
- 5. Tomcat 7管理器脚本停止/启动应用程序
- 6. 启动和停止服务器脚本
- 7. Infinispan启动和停止脚本
- 8. Bash启动和停止脚本
- 9. 如何使用其他脚本启动和停止脚本?
- 10. 如何从选项页面启动和停止计时器
- 11. PHP脚本停止
- 12. PHP脚本停止
- 13. 管理多个PHP脚本的启动和关闭
- 14. PHP-resque:如何暂停和停止从PHP脚本工人
- 15. runit调用脚本与启动/停止
- 16. Wildfly 10启动,停止独立脚本
- 17. python脚本的shell启动/停止
- 18. bash脚本启动/停止ffmpeg x11grab
- 19. Jboss 7.1.1启动/停止脚本
- 20. 从后面的页眉/页脚停止背景图像
- 21. 在Github上托管时脚本停止工作页面
- 22. 响应后处理页面停止.writefile
- 23. 如何停止python脚本从终端
- 24. 我的节点管理器在启动后停止
- 25. mac终端在启动时运行脚本,如何停止?
- 26. 批处理脚本后停止向其他批处理脚本
- 27. 页面加载时启动动画,加载页面时停止
- 28. 从cron启动PHP脚本?
- 29. 脚本自动启动和停止AWS EC2实例
- 30. -ErrorAction停止后脚本处理不会停止
您想运行一个连续运行的脚本吗?或者你想避免他的开始?你在标签列表中提到守护进程是否是这种你想创建的东西? –
我想创建一个可以持续运行的脚本(或者直到我停下来)。我希望能够通过点击网站上的网页上的按钮来启动和停止该脚本。我想坚持HTML,PHP和Javascript(如有必要),我想创建一个平台不可知的解决方案。 – reggie3