3

我试图从控制服务器在远程机器上生成 beanstalk 工作人员。

我有一个函数,它需要一个主机名,将专用网络上的 SSH 连接到目标机器,然后在该机器上运行命令。

我用来生成工人的命令(当我在目标服务器的提示符下手动执行时)是:

nohup /path/to/php /path/to/file/worker.php &

输出是:

nohup: ignoring input and appending output to `nohup.out'

要返回提示,它需要一个 ctrl+c

当我从远程机器执行此操作时,脚本启动,并显示输出“worker started”,它坐在那里等待工作。我必须按 ctrl+c 才能返回提示。

当我在浏览器中使用 php 运行此命令时,它会生成工作程序,但浏览器只是挂起,最终达到 nginx 超时。我认为这是因为我用来运行命令的 shell_exec() 在运行命令后等待提示符,但这需要 ctrl+c,所以它认为命令没有完成执行。

自行运行该命令后,如何让它返回提示符?

4

1 回答 1

1

您可以通过多种方式在 PHP 中创建 dameon。有图书馆为此,

  1. System_Daemon Pear 包
  2. PHP-Daemon github 包

这个想法很简单。

  • fork 一个子进程并退出父进程
  • 关闭所有标准输入、标准输出、标准错误,不要输出任何东西。
于 2012-04-13T02:02:18.367 回答