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

在Debian服务器上,我安装了Node.js. 我知道如何用这个命令行从putty启动一个应用程序:

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

并在地址50.51.52.53:8080和端口)上得到它。

但是,只要我closures腻子,那么我不能再达到地址50.51.52.53:8080

如何使一个NodeJS应用程序永久运行?

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

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

关键是这一行,“我closures腻子,然后我不能达到地址”

当您通过Puttylogin到远程主机时,您已经启动了SSH Linux进程,并且从该SSH会话中键入的所有命令将作为所述进程的subprocess执行。

你的问题是,当你closuresPutty时,你正在退出SSH会话,这个会话将会终止进程和任何活动的subprocess。 当你closures腻子时,你会无意中杀死你的服务器,因为你在前台运行它。 为了避免这种情况,可以在后台运行服务器,并在命令后加上&:

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

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

更新:

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

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

如果问题仍然存在,那么应该研究像tmuxnohup这样的方法,它们比节点特定的解决scheme更加健壮,因为它们可以用来运行所有types的进程(数据库,日志logging服务和其他语言)。

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

 sudo npm install -g forever 

然后开始你的应用程序:

 forever server.js 

或作为服务:

 forever start server.js 

永远重新启动您的应用程序,当它崩溃或由于某种原因停止。 要限制重新启动到5您可以使用:

 forever -m5 server.js 

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

 forever list 

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

 forever stop 0 

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

 forever restart 0 

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

 forever -w server.js 

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

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

安装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] 

如果你只是想在terminal上运行你的节点应用程序,只需使用屏幕即可。

安装在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

你可以简单地使用这个

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

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

为此,您可以安装htop ,然后search节点,然后杀死它

这是我用于个人项目的一个暴发户解决scheme:

把它放在/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次或更多次,它将放弃尝试重新生成应用程序。

在开发过程中,我推荐使用nodemon 。 只要文件发生变化,它就会重新启动服务器。 正如其他人所指出的, 永远是一个select,但在生产中,这一切都取决于你使用的平台。 您通常会希望使用操作系统推荐的方法来维护服务(例如http://www.freedesktop.org/wiki/Software/systemd/ )。

我永远find完美的工作。

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

 sudo apt-get install npm 

然后永远安装

 npm install forever --global 

现在你可以像这样运行它

 forever start app.js 

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

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' 

然后input这个

 rm nohup.out 

在这里输入图像说明

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

请参阅此链接 – https://www.digitalocean.com/community/tutorials/how-to-set-up-a-node-js-application-for-production-on-centos-7

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

 [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来pipe理它:

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