在一台Debian服务器上,我安装了Node.js。我知道如何用这个命令行从putty启动一个应用程序:
node /srv/www/MyUserAccount/server/server.js
并在地址50.51.52.53:8080 (IP和端口)上获得它。
50.51.52.53:8080
但是一旦我关闭putty,那么我就不能再到达地址50.51.52.53:8080了。
如何让一个Node.js应用程序永久运行?
你可以猜到,我是Linux和Node.js的初学者。
我建议寻找诸如永远之类的东西来在崩溃时重新启动Node,并为你处理这个守护进程。
下面是我在个人项目中使用的自命不凡的人解决方案:
将其放置在/etc/init/node_app_daemon.conf中:
/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次或更多,它将放弃重新生成应用程序的尝试。
如果你只是想在终端中运行你的节点应用程序,只需要使用screen。
安装在ubuntu/ debian上:
sudo apt-get install screen
用法:
$ screen $ node /path/to/app.js
ctrl + a,然后ctrl + d来解散
ctrl + a
ctrl + d
get就是回来:
一个屏幕:screen -r
screen -r
如果有多个屏幕,你可以用screen -ls列出所有屏幕
screen -ls
然后:screen -r pid_number
screen -r pid_number
你可以像这样使用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
如果你正在处理你的应用程序文件,你可以使用-w参数在你的server.js文件改变时自动重新启动:
-w
server.js
forever -w server.js
虽然其他答案解决了OP的问题,但它们都是多余的,并没有解释为什么他或她会遇到这个问题。
关键是这一行,“我关闭putty,然后我无法到达地址”
当您在Putty上登录到远程主机时,您已经启动了一个SSH linux进程,从该SSH会话输入的所有命令将作为该进程的子进程执行。
您的问题是,当您关闭Putty时,您正在退出SSH会话,这会杀死该进程和任何活动的子进程。当你关闭putty时,你无意中杀死了你的服务器,因为你在前景中运行它。为了避免这种行为,在背景中运行服务器,添加&你的命令:
node /srv/www/MyUserAccount/server/server.js &
这里的问题是缺乏linux知识,而不是关于节点的问题。更多信息请查看:http://linuxconfig.org/understanding-foreground-and-background-linux-processes
更新:
正如其他人所提到的,节点服务器在退出终端时仍然可能死亡。我遇到的一个常见的问题是,即使节点进程在bg中运行,它的stdout和stderr仍然指向终端。这意味着如果节点服务器写入console.log或console.log。错误,它将收到一个破裂的管道错误和崩溃。这可以通过管道输出你的进程来避免:
node /srv/www/MyUserAccount/server/server.js > stdout.txt 2> stderr.txt &
如果问题仍然存在,那么你应该考虑像tmux或nohup这样的方法,它们仍然比特定于节点的解决方案更健壮,因为它们可以用于运行所有类型的进程(数据库、日志服务、其他语言)。
一个可能导致服务器退出的常见错误是,在运行nohup node your_path/server.js &后,您只需简单地单击关闭Putty终端。您应该使用exit命令,然后您的节点服务器将启动并运行。
nohup node your_path/server.js &
exit
你可以简单地使用这个
nohup node /srv/www/MyUserAccount/server/server.js &
这将保持应用程序运行,关闭它,你将不得不杀死它。
为此,你可以安装htop,然后搜索节点,然后杀死它
htop
你可以使用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]
nohup working i check in AWS Ubunto vm遵循正确的syntax
syntax
ubuntu@ip-172-00-00-00:~/ms$ nohup node server.js &
然后按enter键,您将看到这一行
ubuntu@ip-172-00-00-00:~/ms$ nohup: ignoring input and appending output to ‘nohup.out’
然后输入这个
rm nohup.out
我发现永远都做得很好。
假设你已经安装了npm,如果没有,就这样做
sudo apt-get install npm
然后永远安装
npm install forever --global
现在你可以这样运行它
forever start app.js
< a href = " https://codingweb。io / run-nodejs-application-background noreferrer“rel = > https://codingweb.io/run-nodejs-application-background/ < / >
我推荐使用PM2,这是一个Node.js应用程序的进程管理器。PM2提供了一种简单的方法来管理和守护应用程序(将它们作为服务运行)。
引用这个链接- https://www.digitalocean.com/community/tutorials/how-to-set-up-a-node-js-application-for-production-on-centos-7
另一种方法是为你的应用程序创建一个系统单元。服务“/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在系统启动时自动启动应用程序。
systemctl start XXX
systemctl stop XXX
systemctl enable XXX
永远是一个非常好的NodeJs模块,可以做到这一点。
通过在命令行中输入安装forever
forever
$ npm install forever -g
然后使用以下命令运行node.js脚本
$ forever start /path/to/script.js
你可以出发了。此外,你可以运行
$ forever list
查看所有正在运行的脚本。您可以通过键入来终止任何特定的脚本
$ forever stop [pid]
其中[pid]是你将从list命令中获得的脚本的进程ID。要停止所有脚本,您可以输入
[pid]
list
$ forever stopall
安装
$ [sudo] npm install forever -g
您可以使用forever来连续运行脚本
forever start server.js forever list
停止服务
forever stop server.js
我希望这对你有所帮助。
在命令行,永远安装:
npm install forever -g
创建一个示例文件:
sudo nano server.js
您可以直接在浏览器中编辑该文件并获得结果 您可以使用filezilla或任何编辑器来编辑该文件。 执行命令运行文件
forever start --minUptime 1 --spinSleepTime 1000 -w server.js
首先全局安装pm2
npm install -g pm2
然后开始
pm2 start bin/www
不需要安装其他包。
执行此命令
node server.js > stdout.txt 2> stderr.txt &
server.js是你的服务器文件,也可以是api.js
之后,点击“退出”关闭终端
永远包适用于我,只有一件事,它取决于deep-equal,所以如果你有安装它的问题,如:
npm -g install forever
试一试:
npm -g install forever deep-equal@1.1.1
代替。
尝试pm2让你的应用程序永远运行。
pm2
然后使用
pm2 start server.js
要列出和停止应用程序,使用命令
pm2 list
pm2 stop 0
正如我们所知,有很多选择可以做到这一点。这是一个纯Shell解决方案,不需要额外的程序/包。
此解决方案将重新启动server.js,如果它因某种原因/错误崩溃。
假设这是一个run.sh:
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 & )