如何使一个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 & 
如果问题仍然存在,那么应该研究像tmux或nohup这样的方法,它们比节点特定的解决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 
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理和守护应用程序(将它们作为服务运行)。
另一种方法是为您的应用程序创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自动启动应用程序,当系统启动。