0

我有这个 node.js 服务器,一旦生成,它就需要来自标准输入的一些输入。输入不应该立即给出:我需要在给出它们之前等待一些事件(例如来自某人的连接)。如果我发出命令并关闭 shell,服务器就会自行关闭。我想将输入提供给服务器并关闭我的 shell(有效地让服务器保持运行)。

例如,我知道要在后台运行一个进程,我需要这样做node my_server.js &,但这会阻止来自命令行的输入。我想给出这个输入,然后把它放在后台。像这样的模块forever会自动将其置于后台,而无需让我通过标准输入提供输入。

此外,将脚本置于后台会在关闭 shell 时杀死服务器。

有什么建议吗?

谢谢

4

2 回答 2

1

我在 Ubuntu 12.04 中使用 gedit 做了一个快速测试,它工作正常。

像“node app.js arg1 arg2”一样启动您的节点应用程序,但是您想要并按Enter键启动程序。然后在程序开始运行后按 CTRL-z。这使您返回终端,但在后台停止该过程。要让它现在在后台运行,只需“bg”并按 Enter。这将使进程现在继续运行,但在后台运行。

您可以确认您仍然使用命令“ps -ef | grep node”,它应该显示您的程序仍在运行。

但是,这仍然会将节点进程附加到终端窗口,因此当您关闭终端窗口时,它将关闭该进程。但我认为这会让您快速轻松地获得大部分您似乎正在寻找的东西。

于 2013-04-23T14:06:33.917 回答
1

您要求任何建议,所以这里是:使您的服务器能够在没有用户交互的情况下启动。最简单的方法可能是创建一个包含服务器所需输入的文件,然后像这样启动它:

node my_server.js < my_input.txt &

如果所需的输入取决于服务器输出的内容(哎哟),请使用expect(1). 如果可能的话,颠覆整个事情并使用一个模块,比如commander从命令行而不是标准输入获取输入。

于 2013-04-23T14:06:54.603 回答