如何使node.js应用程序永久运行?

Sam*_*Sam 236 node.js server

在Debian服务器上,我安装了Node.js. 我了解如何使用此命令行从putty启动应用程序:

node /srv/www/MyUserAccount/server/server.js
Run Code Online (Sandbox Code Playgroud)

并在地址50.51.52.53:8080(IP和端口)上找到它.

但是一旦我关闭腻子,我就再也无法到达地址50.51.52.53:8080了.

如何使Node.js应用程序永久运行?

你可以猜到,我是Linux和Node.js的初学者.

小智 323

你可以像这样使用npm 永远安装:

sudo npm install -g forever
Run Code Online (Sandbox Code Playgroud)

然后启动您的应用程序:

forever server.js
Run Code Online (Sandbox Code Playgroud)

或作为服务:

forever start server.js
Run Code Online (Sandbox Code Playgroud)

Forever因某种原因崩溃或停止时会永远重启您的应用.要将重新启动限制为5,您可以使用:

forever -m5 server.js
Run Code Online (Sandbox Code Playgroud)

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

forever list
Run Code Online (Sandbox Code Playgroud)

请注意括号中的整数,并按如下所示使用它来停止进程:

forever stop 0
Run Code Online (Sandbox Code Playgroud)

重新启动正在运行的进程:

forever restart 0
Run Code Online (Sandbox Code Playgroud)

如果您正在处理应用程序文件,则可以使用该-w参数在server.js文件更改时自动重新启动:

forever -w server.js
Run Code Online (Sandbox Code Playgroud)

  • @MarthaJames如果在ssh会话/窗口关闭时关闭,那么你可能忘记在`forever start <file>中包含"start" (11认同)
  • 使用`forever server.js`和`forever start server.js`有什么区别?我知道它说"作为一种服务",但这意味着什么? (8认同)
  • 当我输入`forever server.js`时,它会启动服务器.如果我按下`Ctrl` +`C`,它就会停止服务.如果我输入`forever start server.js`然后它启动服务,即使按下`Ctrl` +`C`它也会保持打开状态.然后,您可以执行上面的其他引用命令来停止/查看列表.这就是我至少经历过的. (5认同)
  • 这是在服务器重启后启动脚本吗? (5认同)
  • `forever` 模块 (v0.15.3) 容易受到正则表达式拒绝服务攻击,不应使用:https://github.com/foreverjs/forever/issues/960 (2认同)

Dog*_*ler 202

虽然其他答案解决了OP的问题,但它们都是矫枉过正,并没有解释为什么他或她正在经历这个问题.

关键是这条线,"我关闭腻子,然后我无法到达地址"

当您在Putty上登录到远程主机时,您已经启动了SSH linux进程,并且从该SSH会话中键入的所有命令将作为所述进程的子进程执行.

您的问题是当您关闭Putty时,您将退出SSH会话,该会话会终止该进程以及任何活动的子进程.当你关闭putty时,你无意中杀死了你的服务器,因为你在前台运行它.要避免此行为,请通过附加&命令在后台运行服务器:

node /srv/www/MyUserAccount/server/server.js &
Run Code Online (Sandbox Code Playgroud)

这里的问题是缺乏linux知识而不是关于节点的问题.有关更多信息,请查看:http://linuxconfig.org/understanding-foreground-and-background-linux-processes

更新:

正如其他人所提到的,节点服务器在退出终端时可能仍然死亡.我遇到的常见问题是,即使节点进程在bg中运行,它的stdout和stderr仍然指向终端.这意味着如果节点服务器写入console.log或console.error,它将收到一个损坏的管道错误并崩溃.通过管道流程的输出可以避免这种情况:

node /srv/www/MyUserAccount/server/server.js > stdout.txt 2> stderr.txt &
Run Code Online (Sandbox Code Playgroud)

如果问题仍然存在,那么你应该研究像tmuxnohup这样的东西,它们仍然比特定于节点的解决方案更强大,因为它们可以用来运行所有类型的进程(数据库,日志服务,其他语言).

可能导致服务器退出的常见错误是在运行之后,nohup node your_path/server.js &只需单击即可关闭Putty终端.您应该使用exit命令,然后您的节点服务器将启动并运行.

  • "&"使进程在后台运行,但实际上您需要在此命令的开头添加"nohup"以将其从控制台窗口中分离,以便在窗口进入睡眠状态后应用程序不会停止小时,修改前面提到的命令:`nohup node /srv/www/MyUserAccount/server/server.js&` (18认同)
  • 如果你仍然关闭Putty会话,而```服务仍然关闭.(刚刚在Debian Jesse上测试过) (7认同)
  • @Annjawn,你必须使用`exit`命令退出终端. (4认同)
  • AIX powersystem,`nohup node myApp.js&`在bg中运行了应用程序,但是当该术语关闭时它就会死掉.不知道为什么. (2认同)

Vik*_*hit 75

您可以使用PM2,它是具有内置负载均衡器的Node.js应用程序的生产流程管理器.

安装PM2

$ npm install pm2 -g
Run Code Online (Sandbox Code Playgroud)

启动一个应用程序

$ pm2 start app.js
Run Code Online (Sandbox Code Playgroud)

如果您使用快递,那么您可以启动您的应用程序

pm2 start ./bin/www --name="app"
Run Code Online (Sandbox Code Playgroud)

列出所有正在运行的进

$ pm2 list
Run Code Online (Sandbox Code Playgroud)

它将列出所有过程.然后,您可以使用以下命令使用应用程序的ID或名称来停止/重新启动服务.

$ pm2 stop all                  
$ pm2 stop 0                    
$ pm2 restart all               
Run Code Online (Sandbox Code Playgroud)

显示日志

$ pm2 logs ['all'|app_name|app_id]
Run Code Online (Sandbox Code Playgroud)

  • 上帝祝福你!有用!!Forever 和 Nohup 不适用于亚马逊网络服务 bitnami nodejs 服务器 (https://docs.bitnami.com/aws/infrastructure/nodejs/)。PM2 很好用! (3认同)
  • 这个库好像是github上启动次数最高的 (2认同)

Bra*_*rad 41

我建议寻找像Forever这样的东西,以便在发生崩溃时重新启动Node,并为您处理守护进程.

  • 对于大多数unixen(包括Linux的大多数发行版),如果关闭终端窗口,在后台运行仍会终止进程.为了防止这种情况,请使用`nohup`.示例:`nohup node app.js&` (4认同)

fil*_*m42 33

如果您只想在终端中运行您的节点应用程序,只需使用屏幕即可.

在ubuntu/debian上安装:

sudo apt-get install screen
Run Code Online (Sandbox Code Playgroud)

用法:

$ screen
$ node /path/to/app.js
Run Code Online (Sandbox Code Playgroud)

ctrl + a然后ctrl + d解雇

得到回来:

一个屏幕: screen -r

如果有多个,您可以列出所有屏幕: screen -ls

然后: screen -r pid_number


Ric*_*Roy 24

你可以简单地使用它

nohup node /srv/www/MyUserAccount/server/server.js &
Run Code Online (Sandbox Code Playgroud)

这将使应用程序保持运行并关闭它,你将不得不杀死它.

为此你可以安装htop然后搜索节点然后杀死它

  • 重要的是要注意,在这种情况下,用户需要正确退出PuTTY会话(即通过`exit`命令).如果用户只是关闭窗口,这可能会使用"SIGHUP"以外的信号来结束进程,因此节点无论如何都会关闭. (18认同)

小智 12

Forever是一个非常好的NodeJs模块.

forever通过在命令行中键入来安装

$ npm install forever -g
Run Code Online (Sandbox Code Playgroud)

然后使用以下命令运行node.js脚本

$ forever start /path/to/script.js
Run Code Online (Sandbox Code Playgroud)

你已准备好出发.另外你可以跑

$ forever list
Run Code Online (Sandbox Code Playgroud)

查看所有正在运行的脚本.您可以通过键入来终止任何特定脚本

$ forever stop [pid]
Run Code Online (Sandbox Code Playgroud)

[pid]您将从list命令获取的脚本的进程ID 在哪里.要停止所有脚本,您可以键入

$ forever stopall
Run Code Online (Sandbox Code Playgroud)


Gaj*_*ngh 11

无需安装任何其他软件包。

运行这个命令

node server.js > stdout.txt 2> stderr.txt &
Run Code Online (Sandbox Code Playgroud)

server.js是您的服务器文件,也可以是api.js

之后点击“退出”关闭终端

exit
Run Code Online (Sandbox Code Playgroud)


Adi*_*iii 10

nohup工作我在AWS Ubunto vm中检查了正确的syntax

ubuntu@ip-172-00-00-00:~/ms$ nohup node server.js &
Run Code Online (Sandbox Code Playgroud)

然后按回车键,你会看到这一行

ubuntu@ip-172-00-00-00:~/ms$ nohup: ignoring input and appending output to ‘nohup.out’
Run Code Online (Sandbox Code Playgroud)

然后输入这个

rm nohup.out
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

  • 我喜欢你在小bash提示中清空主机名的方式,但是把它留在了窗口的大标题中 (3认同)

Sud*_*ngh 10

安装

$ [sudo] npm install forever -g
Run Code Online (Sandbox Code Playgroud)

您可以永久使用来连续运行脚本

forever start server.js

forever list
Run Code Online (Sandbox Code Playgroud)

停止服务

forever stop server.js
Run Code Online (Sandbox Code Playgroud)


Ada*_*lin 9

这是我一直用于个人项目的新贵解决方案:

把它放在/etc/init/node_app_daemon.conf:

description "Node.js Daemon"
author      "Adam Eberlin"

stop on shutdown

respawn
respawn limit 3 15

script
  export APP_HOME="/srv/www/MyUserAccount/server"
  cd $APP_HOME
  exec sudo -u user /usr/bin/node server.js
end script
Run Code Online (Sandbox Code Playgroud)

这也将处理在应用程序崩溃时重新生成的应用程序.如果应用程序在不到15秒的时间内崩溃3次或更多次,它将放弃重新生成应用程序的尝试.


Oli*_*nde 9

在开发过程中,我建议使用nodemon.只要文件发生变化,它就会重新启动服务器.正如其他人所指出的那样,Forever是一种选择,但在生产中,这一切都取决于您使用的平台.您通常希望使用操作系统推荐的保持服务的方式(例如http://www.freedesktop.org/wiki/Software/systemd/).


小智 8

我发现永远完美地完成这项工作.

假设你已经安装了npm,如果没有,就这样做

sudo apt-get install npm
Run Code Online (Sandbox Code Playgroud)

然后永远安装

npm install forever --global
Run Code Online (Sandbox Code Playgroud)

现在你可以像这样运行它

forever start app.js
Run Code Online (Sandbox Code Playgroud)

https://codingweb.io/run-nodejs-application-background/


Vin*_*eri 6

首先在全球安装pm2

npm install -g pm2
Run Code Online (Sandbox Code Playgroud)

然后开始

pm2 start bin/www 
Run Code Online (Sandbox Code Playgroud)


小智 6

尝试pm2让您的应用程序永远运行。

npm install -g pm2

然后使用

pm2 start server.js

要列出和停止应用程序,请使用commnds

pm2 list

pm2 stop 0


Ale*_*lex 5

另一种方法是为您的应用程序创建系统单元。在“ / etc / systemd / system”文件夹中创建一个“ XXX.service”文件,类似于:

[Unit]
Description=swagger
After=network.target

[Service]
ExecStart=/usr/bin/http-server /home/swagger/swagger-editor &
WorkingDirectory=/home/swagger
Restart=always
RestartSec=30

[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)

好处是该应用程序将作为服务运行,如果崩溃将自动重新启动。

您还可以使用sytemctl对其进行管理:

systemctl start XXX启动服务,systemctl stop XXX停止服务以及systemctl enable XXX在系统启动时自动启动应用程序。


Gha*_*iya 5

我希望这能帮到您。

在命令行中,永久安装:

npm install forever -g
Run Code Online (Sandbox Code Playgroud)

创建一个示例文件:

sudo nano server.js 
Run Code Online (Sandbox Code Playgroud)

您可以直接在浏览器中编辑文件并获得结果。
您可以使用 filezilla 或任何编辑器来编辑该文件。运行此命令以运行文件:

forever start --minUptime 1 --spinSleepTime 1000 -w server.js
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明