我有这个node.js服务器,一旦产生,就需要来自stdin的一些输入。输入不应该立即给出:我需要在给出它们之前等待一些事件(例如来自某人的连接)。如果我给出命令并关闭shell,服务器会自行关闭。我想将输入提供给服务器并关闭我的shell(有效地让服务器继续运行)。
我知道要在后台运行一个进程我需要做的例如node my_server.js &
,但这会阻止来自命令行的输入。我想提供这个输入然后把它放在后台。像forever
这样的模块会自动将它放在后台,而不会让我通过stdin给出输入。
此外,在关闭shell时,将脚本放在后台仍然会杀死服务器。
有什么建议吗?
由于
答案 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获取输入。