287

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

node /srv/www/MyUserAccount/server/server.js

并通过地址50.51.52.53:8080(IP 和端口)访问它。

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

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

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

4

19 回答 19

377

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

sudo npm install -g forever

然后使用以下命令启动您的应用程序:

forever server.js

或作为服务:

forever start server.js

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

forever -m5 server.js

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

forever list

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

forever stop 0

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

forever restart 0

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

forever -w server.js
于 2012-10-18T07:46:42.637 回答
253

尽管其他答案解决了 OP 的问题,但它们都太过分了,并没有解释他或她为什么会遇到这个问题。

关键是这一行,“我关闭腻子,然后我无法到达地址”

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

您的问题是,当您关闭 Putty 时,您将退出 SSH 会话,该会话会杀死该进程和任何活动的子进程。当您关闭腻子时,您会无意中杀死您的服务器,因为您在前台运行它。为了避免这种行为,通过将 & 附加到您的命令,在后台运行服务器:

node /srv/www/MyUserAccount/server/server.js &

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

更新:

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

node /srv/www/MyUserAccount/server/server.js > stdout.txt 2> stderr.txt &

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

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

于 2015-08-15T21:06:08.480 回答
96

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

安装 PM2

$ npm install pm2 -g

启动应用程序

$ pm2 start app.js

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

pm2 start ./bin/www --name="app"

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

$ pm2 list

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

$ pm2 stop all                  
$ pm2 stop 0                    
$ pm2 restart all               

显示日志

$ pm2 logs ['all'|app_name|app_id]
于 2016-10-26T06:15:27.460 回答
44

我建议寻找诸如Forever之类的东西,以便在发生崩溃时重新启动 Node,并为您处理守护进程。

于 2012-10-03T02:52:49.220 回答
41

如果您只想始终在终端中运行您的节点应用程序,只需使用 screen。

在 ubuntu/debian 上安装:

sudo apt-get install screen

用法:

$ screen
$ node /path/to/app.js

ctrl + a然后ctrl + d解雇

得到回来:

一屏:screen -r

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

接着:screen -r pid_number

于 2012-10-03T13:58:17.770 回答
32

你可以简单地使用这个

nohup node /srv/www/MyUserAccount/server/server.js &

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

为此,您可以安装htop然后搜索节点然后将其杀死

于 2015-10-27T05:04:08.647 回答
13

Forever是一个非常好的 NodeJs 模块,可以做到这一点。

forever在命令行中输入安装

$ npm install forever -g

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

$ forever start /path/to/script.js

你已准备好出发。此外,您可以运行

$ forever list

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

$ forever stop [pid]

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

$ forever stopall
于 2018-03-09T15:30:31.480 回答
13

安装

$ [sudo] npm install forever -g

您可以使用 forever 连续运行脚本

forever start server.js

forever list

停止服务

forever stop server.js
于 2018-03-16T12:06:07.920 回答
12

在开发过程中,我推荐使用nodemon。每当文件更改时,它将重新启动您的服务器。正如其他人指出的那样,Forever是一种选择,但在生产中,这完全取决于您使用的平台。您通常会希望使用操作系统推荐的方式来保持服务正常运行(例如http://www.freedesktop.org/wiki/Software/systemd/)。

于 2012-10-18T08:30:33.963 回答
10

nohup工作我检查了AWS Ubunto vm 遵循正确的syntax

ubuntu@ip-172-00-00-00:~/ms$ nohup node server.js &

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

ubuntu@ip-172-00-00-00:~/ms$ nohup: ignoring input and appending output to ‘nohup.out’

然后输入这个

rm nohup.out

在此处输入图像描述

于 2016-10-31T10:40:55.693 回答
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

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

于 2012-10-03T03:00:11.580 回答
9

我发现永远可以完美地完成这项工作。

假设您已经安装了 npm,如果没有,请执行

sudo apt-get install npm

然后永久安装

npm install forever --global

现在你可以像这样运行它

forever start app.js

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

于 2017-03-17T12:29:53.480 回答
8

首先全局安装pm2

npm install -g pm2

然后开始

pm2 start bin/www 
于 2018-10-17T08:19:39.233 回答
7

另一种方法是为您的应用程序创建一个系统单元。在“/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

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

你也可以使用 sytemctl 来管理它:

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

于 2017-09-12T23:24:36.933 回答
5

我希望这能帮到您。

在命令行中,永久安装:

npm install forever -g

创建一个示例文件:

sudo nano server.js 

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

forever start --minUptime 1 --spinSleepTime 1000 -w server.js

在此处输入图像描述

于 2018-05-29T13:18:10.250 回答
5

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

运行此命令

node server.js > stdout.txt 2> stderr.txt &

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

之后点击“ exit ”关闭终端

exit
于 2018-11-26T09:40:05.620 回答
4

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

npm install -g pm2

然后使用

pm2 start server.js

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

pm2 list

pm2 stop 0

于 2020-09-01T04:32:12.530 回答
2

我推荐使用 PM2,它是 Node.js 应用程序的进程管理器。PM2 提供了一种简单的方法来管理和守护应用程序(将它们作为服务运行)。

参考这个链接 - https://www.digitalocean.com/community/tutorials/how-to-set-up-a-node-js-application-for-production-on-centos-7

于 2017-08-01T14:06:40.037 回答
2

永远包对我有用,只有一件事,它取决于deep-equal,所以如果你在安装它时遇到问题,比如:

npm -g install forever

尝试:

npm -g install forever deep-equal@1.1.1

反而。

于 2020-04-04T06:09:59.790 回答