php - 长进程 php

标签 php long-running-processes

我需要运行一个非常长的 php 脚本(四个半小时,五个小时)。

脚本有时运行成功,但有时会莫名其妙地被杀死(可能与共享主机有关??)。

我认为运行脚本的解决方案可能是更小的 block 。

为了做到这一点,我编写了一个脚本,将其状态和位置存储在一个 xml 文件中,并在移动位置之前执行脚本的一部分。

我在连接脚本的最后一位时遇到问题,这应该会结束当前进程并重新执行脚本。

或者我完全找错了树!

我已经通读了我在 SO 和其他地方可以找到的内容,但我仍然不明白:(

请帮忙!!!

最佳答案

考虑到您有一个永远运行但不会导致数据不一致的脚本,您可以使用 cronjob。

问题是您需要知道您的脚本是否仍在运行,因为您可能不想启动它两次。我想到的两个解决方案是脚本的进程 ID (getmypid()) 或使用时间戳。

对于 PID:

  • 在脚本启动时保存 PID(到/tmp/script_pid)
  • 每分钟触发一次 cronjob。查找带有保存PID的事件进程,如果没有找到则启动。

您需要访问 php 的 exec()(和 friend )和命令行工具,例如 linux 的“ps”。

对于时间戳:

  • 保存每次迭代的时间戳。
  • 每分钟触发一次 cronjob。如果时间戳早于 X,则启动新进程。

你必须弄清楚 X 应该有多长。

关于php - 长进程 php,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2658471/

相关文章:

php - 接口(interface)和抽象类继承,扩展类中的实现

php - WordPress 两步注册表格

php - htaccess 重定向未按预期工作

c - 程序在进入功能之前停止,没有错误或警告

ios - beginBackgroundTaskWithExpirationHandler 调用 endBackgroundTask 但没有结束进程

php - Joomla 3.2 - 查看 $this->get ('Form' ) 返回 false,然后返回表单

php - 如何将 CSS 减少到几个属性

php - 连接到数据库执行持久的 php 代码

java - 使用 Java 8 流映射函数来执行长时间运行的任务

c# - 从客户端通过 WCF 取消长时间运行的任务