我需要运行一个非常长的 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/