并行运行Cron作业(PHP)

并行运行Cron作业(PHP),php,parallel-processing,cron,fork,Php,Parallel Processing,Cron,Fork,在过去,我运行了一组脚本,每个脚本作为一个单独的cron作业。现在,我想用一个cron作业运行一个控制器脚本,然后让它分别调用脚本(并且并行地,同时调用),这样我就不必每次添加另一个脚本时都创建一个新的cron作业 我查了一下pcntl\u fork(),但我们没有安装它。fsockopen()也可以这样做吗 有几个问题: 我看到了这个例子,它使用了fsockopen()。这允许我并行运行PHP脚本吗?注意,这些脚本不会交互,但我仍然想知道是否有任何脚本因错误而过早退出 其次,我运行的脚本不能从

在过去,我运行了一组脚本,每个脚本作为一个单独的cron作业。现在,我想用一个cron作业运行一个控制器脚本,然后让它分别调用脚本(并且并行地,同时调用),这样我就不必每次添加另一个脚本时都创建一个新的cron作业

我查了一下
pcntl\u fork()
,但我们没有安装它。
fsockopen()
也可以这样做吗

有几个问题:

  • 我看到了这个例子,它使用了
    fsockopen()
    。这允许我并行运行PHP脚本吗?注意,这些脚本不会交互,但我仍然想知道是否有任何脚本因错误而过早退出

  • 其次,我运行的脚本不能从外部访问,它们只是内部的。脚本以前是这样运行的:php-f/path/to/my/script1.php。这不是一条可通过网络访问的路径。#1中的示例是否适用于此,还是仅适用于web访问路径


  • 感谢您提供的建议。

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

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

    传递第一个param
    php/your/path/to/script.php param1“param2 x”
    意味着启动一个单独的php进程

    最终,您将希望使用无限while循环+usleep(或sleep)来避免CPU的最大化。在所有进程完成时或在您终止它们后中断

    编辑:您可以知道进程是否过早退出


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

    如果我错了,请纠正我,但如果我理解正确,Tiberiu Ionut Stan提出的解决方案意味着在proc_打开并等待它们完成的情况下启动进程将不会作为cron脚本运行,而是正在运行的程序/服务的一部分,对吗


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

    由于sockopen通过连接到服务器侦听来工作,因此如果文件无法通过web访问,则无法使用它访问它们。提示-预计长时间运行的脚本可能会崩溃,我还可以使用exec()并行运行进程吗?如果您在后台运行它,这是并行的,对吗?不,exec等待进程完成,而您无法控制它。您可以运行一个进程,但并行运行的进程不多。PHP.net这样说:“如果一个程序是用这个函数启动的,为了让它在后台继续运行,程序的输出必须重定向到一个文件或另一个输出流。如果不这样做,将导致PHP挂起,直到程序的执行结束。”所以我应该可以并行运行,对吗?但我能看到它们何时全部完成吗?如果允许这种特殊的输出重定向(可能在Linux上)。然而,这是一个糟糕且繁琐的解决方案,虽然它不是必需的(您没有用于检查进程是否仍在运行的进程句柄,您不知道它何时完成对输出的检查,您无法终止它或找出它的PID)。popen和proc_open性能卓越,非常适合您的需求。