0

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

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

几个问题:

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

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

感谢您提供的任何建议。

4

2 回答 2

1

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

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

于 2014-11-12T04:43:49.293 回答
1

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

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

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

proc_open(参见示例 #1)

最终,您将希望使用无限的 while 循环 + usleep(或睡眠)来避免 CPU 用尽。当所有进程完成时中断,或者在你杀死它们之后中断。

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

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

于 2012-05-30T15:32:58.430 回答