如何在控制台关闭时永远运行node.js应用程序?

时间:2011-04-28 11:56:55

标签: node.js

我通过ssh连接到我的远程服务器。然后我用Forever启动我的node.js应用程序。一切正常,直到我关闭我的控制台窗口。即使我通过ssh关闭连接,如何在我的远程服务器上运行node.js app FOREVER?我只是想启动一个应用程序并关闭我的copmputer。我的应用应该在远程服务器的后台工作。

12 个答案:

答案 0 :(得分:56)

您可能还想考虑使用upstart实用程序。它将允许您像服务一样启动,停止和重新启动节点应用程序。 Upstart可以配置为在应用程序崩溃时自动重启。

安装新贵:

sudo apt-get install upstart

为您的应用程序创建一个简单的脚本,如下所示:

#!upstart
description "my app"

start on started mountall
stop on shutdown

# Automatically Respawn:
respawn
respawn limit 99 5

env NODE_ENV=production

exec node /somepath/myapp/app.js >> /var/log/myapp.log 2>&1

然后将脚本文件(myapp.conf)复制到/ etc / init并确保将其标记为可执行文件。然后可以使用以下命令管理您的应用程序:

sudo start myapp
sudo stop myapp
sudo restart myapp

答案 1 :(得分:28)

两个答案:一个用于Windows,一个用于* nix:

在Windows上,您可以使用start命令启动与cmd.exe实例断开连接的流程:

start node example.js

在* nix上,有两个方面:断开进程与控制台的连接,并确保它没有收到HUP信号(“挂断”),大多数进程(包括节点)将通过终止来回应。前者可能是可选的,但后者是必要的。

从控制台开始断开连接非常简单:通常,您只需在命令行末尾添加&符号(&):

# Keep reading, don't just grab this and use it
node example.js &

以上并不能保护进程免受HUP信号的影响。关闭shell(控制台)时,程序可能会收到HUP,也可能不会收到huponexit,具体取决于名为huponexit的shell选项。如果trueHUP,则当shell退出时,该过程将收到huponexit,并且可能会终止。

false对我使用过的各种Linux变体默认为huponexit,实际上我很乐意使用上述内容多年,直到coderjoe和其他人帮助我理解(非常可能已被删除的答案下的长评论流)我依赖falsehuponexit

为避免环境中true成为nohup的可能性,请明确使用nohupHUP运行过程免受nohup node example.js > /dev/null & 信号的影响。你这样使用它:

nohup node example.js > your-desired-filename-or-stream-here &

nohup.out

重定向很重要;如果你不这样做,你最终会得到一个包含stdoutstderr输出的nohup文件。 (默认情况下,stderr会将stdout重定向到stdout,如果nohup.out正在输出到终端,则会将其重定向到nohupstdin如果它是从终端接收的,也会重定向man nohup,因此我们不必这样做。有关详细信息,请参阅info coreutils 'nohup invocation'或{{1}}。)

通常对于这些事情,您希望使用进程监视器,以便在进程因某种原因崩溃时,监视器会重新启动它,但上面的 可以用于简单的情况。

答案 2 :(得分:18)

总是,简单是最好的,不需要暴发户,不需要永远,只是nohup:

  

nohup node file.js &

相信我,我正在为我的情况而奔跑!

答案 3 :(得分:8)

我肯定会推荐pm2
npm install -g pm2

启动服务器:pm2 start [yourServerFile.js]
停止服务器:pm2停止[yourServerFile.js]

关闭客户端和服务器将永远运行....如果应用程序崩溃,也会重新启动 我已经在Ubuntu上运行节点服务器几个月没有问题

答案 4 :(得分:4)

您可以像这样使用npm永久安装:

  sudo npm install -g forever

或作为服务

 forever start server.js

或停止服务

forever stop server.js

列出所有正在运行的进程:

forever list

答案 5 :(得分:3)

例如

node expamle.js &

答案 6 :(得分:3)

在Linux中,SSH进入远程服务器并运行

screen

启动进入新屏幕。

最后,键入 ctrl a d 以分离屏幕会话而不会终止进程。

更多信息here

答案 7 :(得分:1)

这只是 Windows 的部分答案。我创建了一个名为app.vbs的单行Visual Basic脚本,它将在隐藏窗口中启动您的节点应用程序:

CreateObject("Wscript.Shell").Run "node app.js", 0

要在启动时自动执行,请打开%AppData%\Microsoft\Windows\Start Menu\Programs\Startup\目录并添加app.vbs文件的快捷方式。

更多信息:https://keestalkstech.com/2016/07/start-nodejs-app-windowless-windows/

答案 8 :(得分:1)

我有类似的问题,我认为永远使用将有助于处理崩溃和重新启动

您可以全局安装: sudo nom install -g forever

运行此命令:

nohup forever server.js &

这应该可以解决关闭终端,关闭ssh会话,节点崩溃和重启的所有麻烦。

答案 9 :(得分:1)

如果您在生产环境中运行node.js,则应考虑使用PM2,forever.js或Nodemon。

在线比较不同​​包装的文章并不缺乏。

答案 10 :(得分:1)

哇,我刚刚找到了一个非常简单的解决方案:

首先,启动您的流程(节点应用)

forever dist/index.js

运行:^Z cmd + z。

然后:bg。是的。背景(背景)。 和..你出去了。

如果您使用exit,请使用ssh完成操作,或者仅关闭终端。

答案 11 :(得分:0)

我的 start.sh 文件:

#/bin/bash

nohup forever -c php artisan your:command >>storage/logs/yourcommand.log 2>&1 &

只有一件重要的事情。第一个命令必须为“ nohup”,第二个命令必须为“ forever”,“-c”参数为永远的参数,“ 2>&1&”区域为“ nohup”。运行完此行后,您可以从终端注销,重新登录并运行“永远重启全部”,您可以重新启动,并且可以确保如果脚本停止然后永远重新启动它。

我<3永远

相关问题