2010-11-01 50 views
4

不知何故,这不是谷歌搜索产生的。如何启动一个当我的SSH会话结束时不会结束的进程?

我正在为node.js中的服务器编写脚本。我通过与节点程序执行的脚本启动服务器:

节点myserver.js

但一直服务器是依赖于我的SSH会话。我怎样才能使这个(和所有这样的过程)持久? init.d中?

+1

我认为这更多的是在系统管理的范围之内,并且更适合服务器故障。 – meagar 2010-11-01 17:46:46

+0

类似的问题http://serverfault.com/q/311593/87375 – 2014-03-18 04:08:01

回答

11

使用nohup命令:

http://en.wikipedia.org/wiki/Nohup

nohup的是POSIX命令忽略HUP(挂起)信号,使命令继续运行谁发出该命令的用户登录后出。按照惯例,HUP(挂断)信号是终端警告取决于注销过程的方式。

试试这个:

nohup node myserver.js & 
+0

是否有&符号故意在那里? – mkrecny 2010-11-01 17:51:37

+0

@ user470520,是的,这是故意的,因为这表明shell在后台运行此命令。如果您想了解更多信息,请阅读更多关于作业控制的内容:http://www.gnu.org/software/bash/manual/bashref.html#Job-Control – 2010-11-01 18:20:49

3

你试过GNU screen?使用它,当你结束你的SSH会话时,一个进程可以继续运行。 nohup是一个标准的* nix命令,可以让你做同样的事情,尽管以更有限的方式。

1

使用屏幕。从终端键入屏幕,然后启动您的过程。如果断开连接,您可以重新连接到ssh会话,通过输入'screen -ls'(查看活动屏幕)和'screen -r'重新连接。

0

nohup很好地运行下的工作。如果作业已经运行,你可以尝试disown -h(至少在bash中)