如何在后台运行一个NodeJS应用程序,而不会在注销时结束?

我试图让我的Ubuntu服务器上运行的应用程序,以便Google有时间ping它,但是当我注销时,应用程序一直closures。

我使用supervisor启动Nodejs应用程序来监视更改(通过shell脚本)

我发现了像nohup这样的命令,但是在运行后台服务方面,除了input诸如service httpd start类的简单命令之外,我真的无能为力,这似乎对CentOS上的Apache非常有用!

我是否需要创build另一个用户来运行服务? 我有一个Ubuntu 10.04的Linode实例

run.sh

 cd myapp/src/main/node supervisor -w "myapp/src/main/node,myapp2/src/main/node,./" run-apps.js 

尝试这个:

 nohup supervisor -w "myapp/src/main/node,myapp2/src/main/node,./" run-apps.js & 

其他一些方法:

  • 在Ubuntu上运行Node.js作为服务
  • 保持一个node.js服务器与永远

它退出的原因是因为当你注销并终止父shell时,脚本收到一个HUP信号,并失去了写入STDOUT和STDERR的能力。

你有4个选项,(按照“正确性”和“清洁度”的顺序):

  1. 修改它,使其忽略HUP信号并干净地logging到文件。
  2. screen会话中运行脚本
  3. 使用nohup运行脚本
  4. 创build一个相当复杂的bash脚本来启动脚本,然后closures相关的STDOUT和STDERR通道。

这里有另一种方法来做到这一点没有nohup :disown它。

例如:

 $ jobs $ sleep 300 & [1] 79844 $ jobs [1] + running sleep 300 $ disown %1 $ jobs $ pgrep sleep 79844 

阐释:

  1. 使用jobs来显示后台作业,没有
  2. 背景sleep 300
  3. 再次使用jobs 。 用于sleep PID是79844,是作业#1
  4. 放弃工作#1
  5. 再次使用jobs 。 没有后台工作。
  6. 使用pgrep来查找任何名为sleep进程。 有一个,与PID 79844(相同的PID)

您可以closuresterminal和/或注销,而不会影响无主的工作。

这样做的好处是不会留下nohup.out文件,但是也会丢失写入STDOUT任何内容。