在 php 后台运行控制台应用程序的最佳方式是啥?
Posted
技术标签:
【中文标题】在 php 后台运行控制台应用程序的最佳方式是啥?【英文标题】:What is the best way to work with console application runned in background in php?在 php 后台运行控制台应用程序的最佳方式是什么? 【发布时间】:2010-12-02 21:55:10 【问题描述】:我的任务是在 php 上编写一些“控制面板”,以使用基于 linux 控制台的应用程序、游戏服务器。 所以,我需要启动、停止(那里没问题)并使用应用程序控制台 - 向它发送字符串命令,然后捕获输出。
最好的方法是什么? 我考虑创建一些 .sh 脚本/模板,并使用 php shell_exec 命令调用它——这将是最简单的方法。 但是如何使用控制台实现工作 - 发送命令和捕获输出的最佳方式是什么?在运行脚本之前调用“fg”,之后调用“bg”? 使用屏幕并切换到它?
最好的方法是什么?
【问题讨论】:
以防万一,看看***.com/questions/1746207/…。 【参考方案1】:最好的方法是将“其他应用程序”作为后台守护程序运行,并通过套接字(tcp、unix、..)与其通信。
如果您也实际开发基于控制台的应用程序,这可以很容易地完成。如果您不这样做,并且该应用程序仅从标准输入/标准输出读取/写入,您可以构建一些其他控制器进程,在套接字上公开这两个 I/O 通道。
我对此提出的第一个想法是一个 Python 脚本,它使用 subprocess
模块在后台运行另一个进程,然后与之通信。然后,让 Python 脚本打开一个套接字来与 PHP 应用程序对话(当然你应该可以用你最喜欢的语言来做。我的是 Python :))。
【讨论】:
【参考方案2】:我刚刚有了一个疯狂的想法。 我可以创建命名管道 - “mkfifo pipename”,然后从 shell_exec 使用它(例如,我可以执行“echo quit >> pipename”。
问题是我无法找到最后一个命令的答案,但这太酷了。在项目的这个阶段,我只需要向服务器发送命令并捕获控制台输出。 我会考虑更多时间,但似乎使用命名管道是最简单的解决方案。
【讨论】:
您需要的绝对是 unix 套接字 (php.net/manual/en/book.sockets.php)!它们很像命名管道,但它们完全像套接字一样工作,不需要打开端口等。以上是关于在 php 后台运行控制台应用程序的最佳方式是啥?的主要内容,如果未能解决你的问题,请参考以下文章
在 Linux / Mono 上运行 ServiceStack 的最佳方式是啥?
将 PHP 设置传达给 Javascript 的最佳方式是啥?
PHP/IOS:为 Web 服务编码 json 的最佳方式是啥?