在给出输入后,在后台运行node.js进程

时间:2013-04-23 13:51:07

标签: linux node.js shell

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

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

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

有什么建议吗?

由于

2 个答案:

答案 0 :(得分:1)

我在Ubuntu 12.04中使用gedit进行了快速测试,但它确实有效。

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

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

但是,这仍然会使节点进程附加到终端窗口,因此当您关闭终端窗口时,它将关闭该进程。但我认为这样可以让您快速轻松地获得您所寻找的大部分内容。

答案 1 :(得分:1)

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

node my_server.js < my_input.txt &

如果所需的输入取决于服务器输出的内容(ouch),请使用expect(1)。如果可能的话,破坏整个事情并使用像commander这样的模块来从命令行而不是stdin获取输入。