如何在单个 shell 行中执行多个 PHP 文件?

How do I execute multiple PHP files in single shell line?

我有一些 PHP 文件。他们每个人都启动一个套接字侦听器,或者 运行 一个无限循环。脚本在通过 php 命令执行时停止:

php sock_listener.php ...halt there
php listener2.php ... halt there
...

目前我使用screen命令在每次机器重启时启动所有监听器PHP文件。有没有一种方法可以在单个 shell 行中启动所有侦听器 PHP 文件,以便我可以编写 shell 脚本以使其更易于使用?

就运行他们在马戏团。 Circus 将允许您定义多个进程以及您想要 运行 的实例数量,并且只保留它们 运行ning。 https://circus.readthedocs.io/en/latest/

使用屏幕

为第一个脚本创建分离屏幕session:

session='php-test'
screen -S "$session" -d -m -t A php a.php

其中 -d -m 组合导致屏幕创建分离 session。

运行 其余脚本在同一 session 中分开 windows:

screen -S "$session" -X screen -t B php b.php
screen -S "$session" -X screen -t C php c.php

哪里

  • -X发送built-inscreen命令到运行session;
  • -t 设置 window 标题。

session 将在 screen -ls 命令的输出中可用:

There is a screen on:
  8951.php-test (Detached)

使用 -r 选项连接到 session,例如:

screen -r 8951.php-test

使用 Ctrl-a 列出屏幕 session 中的 windows" 快捷方式,或 windowlist -b 命令。

将进程分叉到后台

一种不太方便的方法是通过在每个命令的末尾附加一个符号将命令发送到后台:

nohup php a.php 2>a.php.err >a.php.out &
nohup php b.php 2>b.php.err >b.php.out &
nohup php c.php 2>c.php.err >c.php.out &

哪里

    如果用户注销 shell,
  • nohup 会阻止命令终止。阅读 this tutorial 了解更多信息;
  • 2>a.php.err 将标准错误重定向到 a.php.err 文件;
  • >a.php.out 将标准输出重定向到 a.php.out 文件。

Is there a way I can start all the listener PHP files in single shell line so that I can write a shell script to make it easier to use?

您可以将 above-mentioned 命令放入 shell 脚本文件中,例如:

#!/bin/bash -
# Put the commands here

使其可执行:

chmod +x /path/to/script

并在需要时调用它:

/path/to/script

适当修改shebang