使用NodeJS +实时输出从Web运行Linux命令

时间:2012-02-24 15:52:55

标签: php linux node.js websocket

简单地说,是否有可能实现能够从php脚本向nodeJS服务器发送命令的最佳方式是什么(与从客户端js发送命令相比,服务器端阻止用户发送自定义和破坏性命令)到nodejs服务器,然后运行这些命令并将实时输出发送回网页。

到目前为止我能够想出的是使用php curl将命令发送到nodeJS websocket(socket.io),然后通过eventsource / socket.io客户端将nodeJS服务器中继输出。

这样做的目的是通过实时输出用户设置的命令和任务来管理Web上的VPS。 nodejs服务器将在VPS服务器上运行并分离子进程以运行每个命令。如果有可能,那么我看到它变得越来越难,因为每个客户端应该只能看到它们运行的​​命令的结果,所以传入的php套接字和传出的事件源将是一些如何需要链接的?

有什么想法吗? 欢呼声。

1 个答案:

答案 0 :(得分:0)

你可以运行child_process.exec()并将进程stdout和stderr传递给http响应 - 除此之外没有其他内容。

我唯一看到的问题是如果你想让用户运行他们想要的任何命令,Node应用程序就不一定知道MIME类型来告诉浏览器响应是什么。当您需要发送HTTP响应代码时,您不一定知道该进程是否成功 - 所以如果您确实想要使用500 Internal Server Error如果远程进程退出非零,那么您'll需要缓冲输出,直到进程退出,或等待一段时间,并假设如果它在N秒后没有失败则不会。

我假设你意识到让一个进程在远程机器上远程运行ad-hoc程序只是发出一个http请求非常危险,原因就像有可以运行的程序一样多。

以下是如何从Web获取请求,通过程序管理它们并返回响应的示例。它需要一个传入的图像文件,使用netpbmpotrace将其转换为SVG并将结果发送回客户端而无需将其写入磁盘 - unix管道是一件很棒的事情。你需要安装Linux或类似的,w / netpbm和potrace来实际使用它: https://timboudreau.com/code/traceservice/file/tip/traceservice.js