在一台Debian服务器上,我安装了Node.js。我知道如何用这个命令行从putty启动一个应用程序:
node /srv/www/MyUserAccount/server/server.js
并在地址50.51.52.53:8080 (IP和端口)上访问它。
但是当我一关闭putty,我就无法到达50.51.52.53:8080这个地址了。
如何让一个Node.js应用程序永久运行?
你可以猜到,我是Linux和Node.js的初学者。
在一台Debian服务器上,我安装了Node.js。我知道如何用这个命令行从putty启动一个应用程序:
node /srv/www/MyUserAccount/server/server.js
并在地址50.51.52.53:8080 (IP和端口)上访问它。
但是当我一关闭putty,我就无法到达50.51.52.53:8080这个地址了。
如何让一个Node.js应用程序永久运行?
你可以猜到,我是Linux和Node.js的初学者。
当前回答
另一种方法是为你的应用程序创建一个系统单元。服务“/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来管理它:
systemctl start XXX启动服务,systemctl stop XXX停止服务,systemctl enable XXX在系统启动时自动启动应用程序。
其他回答
正如我们所知,有很多选择可以做到这一点。这是一个纯Shell解决方案,不需要额外的程序/包。
如果server.js因为某些原因/错误崩溃,这个解决方案将重新启动server.js。
假设这是一个run.sh:
#!/usr/bin/env sh
while :; do
node server.js
echo "Restarting..."
sleep 1
done
确保run.sh文件可执行:
chmod +x run.sh
要运行它:
./run.sh
如果你想在后台运行它:
./run.sh &
在后台超静音运行(分离,没有任何输出):
( ./run.sh > /dev/null 2>&1 & )
安装
$ [sudo] npm install forever -g
您可以使用forever来连续运行脚本
forever start server.js
forever list
停止服务
forever stop server.js
在开发过程中,我建议使用nodemon。当文件发生变化时,它将重新启动服务器。正如其他人所指出的,Forever是一种选择,但在生产中,这完全取决于你所使用的平台。 您通常希望使用操作系统推荐的方式来保持服务正常运行(例如http://www.freedesktop.org/wiki/Software/systemd/)。
如果你只是想在终端中运行你的节点应用程序,只需要使用screen。
安装在ubuntu/ debian上:
sudo apt-get install screen
用法:
$ screen
$ node /path/to/app.js
CTRL + a,然后CTRL + d取消
get就是回来:
一屏:screen -r
如果有多个屏幕,可以使用screen -ls列出所有屏幕
然后:screen -r pid_number
你可以使用PM2,它是一个带有内置负载均衡器的Node.js应用程序的生产过程管理器。
安装PM2
$ npm install pm2 -g
启动应用程序
$ pm2 start app.js
如果你使用express,你可以启动你的应用程序
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]