并行运行Cron作业(PHP)

时间:2012-05-30 15:23:18

标签: php parallel-processing cron fork

过去,我将一堆脚本作为单独的cron作业运行。现在我想用一个cron作业运行一个控制器脚本,然后分别调用这些脚本(并且同时调用所有脚本),所以每次添加时我都不必创建一个新的cron作业另一个剧本。

我查了pcntl_fork(),但我们没有安装。 fsockopen()也可以这样做吗?

几个问题:

  1. 我看到了这个使用fsockopen()的示例http://phplens.com/phpeverywhere/?q=node/view/254。这是否允许我并行运行PHP脚本?请注意,脚本不会交互,但我仍然想知道它们中是否有任何一个过早退出并出现错误。

  2. 其次,我正在运行的脚本无法从外部访问,它们仅在内部。该脚本以前运行如下: php -f /path/to/my/script1.php 。它不是一个可通过Web访问的路径。 #1中的示例是否可以使用此路径,或仅使用可通过Web访问的路径?

  3. 感谢您提供任何建议。

2 个答案:

答案 0 :(得分:1)

您可以使用proc_open运行多个进程,而无需等待每个进程完成。 您将拥有一个流程句柄,您可以随时终止每个流程,并且您可以阅读每个流程的标准输出。

您也可以通过管道进行通信,这是可选的。

传递第一个参数php /your/path/to/script.php param1 "param2 x"意味着启动一个单独的PHP进程。

proc_open (see Example #1)

最终你会想要使用无限循环+ usleep(或睡眠)来避免最大化CPU。在所有进程完成时或在您杀死它们之后中断。

编辑:您可以知道某个流程是否已过早退出。

Edit2:执行上述操作的更简单方法是popen

答案 1 :(得分:1)

如果我错了,请纠正我,但如果我理解正确,Tiberiu-Ionut Stan提出的解决方案暗示用proc_open启动进程并等待它们完成将不会作为cron脚本运行,而是正在运行的程序/服务的一部分,对吧?

据我了解cron作业,控制器脚本user920050考虑使用将由cron按计划启动,每个新实例将重新启动进程,等待它们完成并可能运行与其他cron启动的控制器脚本实例并行。