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

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

我试图让我的 ubuntu 服务器上的应用程序保持运行,以便 Google 有时间 ping 它,但是当我注销时,该应用程序就会一直关闭。

我启动 Nodejs 应用程序来supervisor监控变化(通过 shell 脚本)

我找到了类似的命令nohup,但是除了输入类似的简单命令之外,我对运行后台服务一无所知,service httpd start这些命令似乎对 CentOS 上的 Apache 运行得很好!

我需要创建另一个用户来运行服务吗?我有一个装有 Ubuntu 10.04 的 Linode 实例

运行

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

答案1

尝试这个:

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

其他一些方法:

答案2

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

您有 4 个选项(按“正确性”和“清洁度”排序):

  1. 对其进行修改,以便它忽略 HUP 信号并干净地记录到文件中。
  2. screen在会话中运行脚本
  3. 使用运行脚本nohup
  4. 创建一个相当复杂的 bash 脚本,启动该脚本然后disown关闭相关的 STDOUT 和 STDERR 通道。

答案3

这是另一种不用nohup“放弃”的方法。

例如:

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

解释:

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

您可以关闭终端和/或注销,而不会影响已放弃的工作。

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

相关内容