服务器怎么关闭终端依然运行node,关闭控制台后如何永久运行node.js应用程序?...

关闭控制台后如何永久运行node.js应用程序?

我通过SSH连接到远程服务器。 然后,我使用Forever启动我的node.js应用程序。 一切正常,直到我关闭控制台窗口。 即使通过ssh关闭连接,如何在我的远程服务器上永远运行node.js应用程序? 我只想启动一个应用程序,然后关闭计算机。 我的应用程序应在远程服务器的后台运行。

Pono asked 2020-01-05T22:55:24Z

10个解决方案

57 votes

您可能还需要考虑使用upstart实用程序。 它将允许您像服务一样启动,停止和重新启动节点应用程序。 可以将Upstart配置为在崩溃时自动重新启动应用程序。

安装新贵:

sudo apt-get install upstart

为您的应用程序创建一个简单的脚本,如下所示:

#!upstart

description "my app"

start on started mountall

stop on shutdown

# Automatically Respawn:

respawn

respawn limit 99 5

env NODE_ENV=production

exec node /somepath/myapp/app.js >> /var/log/myapp.log 2>&1

然后将脚本文件(myapp.conf)复制到/ etc / init,并确保将其标记为可执行文件。 然后可以使用以下命令来管理您的应用程序:

sudo start myapp

sudo stop myapp

sudo restart myapp

Derrish Repchick answered 2020-01-05T22:55:46Z

29 votes

两个答案:一个用于Windows,一个用于* nix:

在Windows上,可以使用nohup.out命令启动与stdout实例断开连接的过程:

start node example.js

在* nix上,这有两个方面:断开进程与控制台的连接,并确保它没有收到nohup.out信号(“挂断”),大多数进程(包括Node)将通过终止来响应。 前者可能是可选的,但后者是必需的。

从控制台断开连接很容易:通常,您只需在命令行的末尾放置一个&符号(nohup.out):

# Keep reading, don't just grab this and use it

node example.js &

但是以上内容不能保护该过程免受nohup.out信号的影响。 当关闭外壳程序(控制台)时,程序可能会收到stdout,也可能不会收到stdout,具体取决于称为stderr的外壳程序选项。如果nohup是HUP,则该进程将在外壳程序退出时收到HUP,并且可能会终止。

在我使用的各种Linux变体上,nohup.out默认为stdout,实际上我很开心地使用了多年,直到coderjoe和其他人帮助我理解了(在很长的评论流中,可能被删除了)。 依靠stderr是nohup。

为避免环境中nohup.out可能是stdout的可能性,请明确使用stderr。nohup运行不受HUP信号影响的进程。 您可以这样使用它:

nohup node example.js > /dev/null &

要么

nohup node example.js > your-desired-filename-or-stream-here &

重定向很重要; 如果不执行此操作,最终将得到一个nohup.out文件,其中包含stdout和stderr的输出。(默认情况下,nohup将nohup重定向到nohup,如果stdout正在输出到终端,则将其重定向到2689845102578972)。 如果nohup是从终端接收的,则nohup还会重定向stdin,因此我们不必这样做。有关详细信息,请参阅man nohup或info coreutils 'nohup invocation'。)

通常,对于这些事情,您希望使用进程监视器,以便如果进程由于某种原因而崩溃,监视器将重新启动它,但是上述方法在简单情况下仍然有效。

T.J. Crowder answered 2020-01-05T22:56:49Z

19 votes

总是,简单是最好的,不需要暴发户,不需要永远,只需要nohup:

nohup node file.js &

相信我,我正在跑步,这样我就可以了!

tquang answered 2020-01-05T22:57:18Z

12 votes

我一定会推荐pm2

npm install -g pm2

要启动服务器:pm2 start [yourServerFile.js]

停止服务器:pm2 stop [yourServerFile.js]

关闭客户端,服务器将永远运行。...如果应用崩溃,也将重新启动。

我已经在Ubuntu上运行节点服务器几个月了,零问题

james murphy answered 2020-01-05T22:58:00Z

7 votes

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

sudo npm install -g forever

或作为服务:

forever start server.js

或停止服务

forever stop server.js

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

forever list

sudhir answered 2020-01-05T22:58:32Z

3 votes

例如node expamle.js &

Emmerman answered 2020-01-05T22:58:52Z

3 votes

在Linux中,SSH进入您的远程服务器并运行

screen

启动到新屏幕。

最后,键入ctrlad可以在不终止进程的情况下分离屏幕会话。

更多信息在这里。

ckirksey3 answered 2020-01-05T22:59:25Z

1 votes

对于Windows,这只是部分答案。 我创建了一个单行的Visual Basic脚本%AppData%\Microsoft\Windows\Start Menu\Programs\Startup\,它将在一个隐藏的窗口中启动您的节点应用程序:

CreateObject("Wscript.Shell").Run "node app.js", 0

要在启动时自动执行它,请打开%AppData%\Microsoft\Windows\Start Menu\Programs\Startup\目录,并将快捷方式添加到app.vbs文件。

有关更多信息,请访问:[https://keestalkstech.com/2016/07/start-nodejs-app-windowless-windows/]

Kees C. Bakker answered 2020-01-05T22:59:54Z

1 votes

我有类似的问题,我认为永远使用将有助于处理崩溃和重新启动

您可以在全球永久安装:sudo nom install -g forever

并运行以下命令:

nohup forever server.js &

这应该处理关闭终端,关闭ssh会话,节点崩溃并重新启动的所有麻烦。

Pini Cheyni answered 2020-01-05T23:00:27Z

1 votes

如果要在生产环境中运行node.js,则应考虑使用PM2,forever.js或Nodemon。

在线比较不同包装的文章并不乏。

Owen Brown answered 2020-01-05T23:00:51Z

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值