如何启动一个不会在我的 ssh 会话结束时结束的进程?

How to start a process that won't end when my ssh session ends?

提问人:mkrecny 提问时间:11/2/2010 更新时间:11/2/2010 访问量:1539

问:

不知何故,这不是通过谷歌搜索产生的。

我正在 node.js 中编写服务器脚本。我通过使用节点程序执行其脚本来启动服务器:

节点 myserver:.js

但是服务器保持正常运行取决于我的 ssh 会话。我怎样才能使这个(以及所有这些过程)持久化?初始化.d?

Linux 进程 节点.js

评论

1赞 user229044 11/2/2010
我认为这更属于系统管理的范围,更适合服务器故障。
0赞 Camilo Sanchez 3/18/2014
类似的问题 serverfault.com/q/311593/87375

答:

0赞 Andrew Sledge 11/2/2010 #1

程序需要在守护进程模式下运行。这是一篇在 Ubuntu 中执行此操作的好文章

10赞 B Johnson 11/2/2010 #2

使用以下命令:nohup

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

nohup 是一个 POSIX 命令,用于忽略 HUP(挂断)信号,使命令能够在发出命令的用户注销后继续运行。按照惯例,HUP(挂断)信号是终端根据注销过程发出警告的方式。

试试这个:

nohup node myserver.js &

评论

0赞 mkrecny 11/2/2010
&号是故意的吗?
0赞 B Johnson 11/2/2010
@user470520,是的,这是故意的,因为这向 shell 指示在后台运行此命令。如果您想了解更多信息,请阅读有关 Job Control 的更多信息:gnu.org/software/bash/manual/bashref.html#Job-Control
3赞 darioo 11/2/2010 #3

你试过GNU屏幕吗?使用它,进程可以在您结束 ssh 会话时继续运行。 是一个标准的 *nix 命令,它允许您执行相同的操作,尽管方式更有限。nohup

1赞 dr jimbob 11/2/2010 #4

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

0赞 frankc 11/2/2010 #5

Nohup 非常适合运行工作。如果作业已经在运行,你可以尝试 disown -h(至少在 bash 中)