我通过ssh连接到我的远程服务器。然后我用Forever启动我的node.js应用程序。一切正常,直到我关闭我的控制台窗口。即使我通过ssh关闭连接,如何在我的远程服务器上运行node.js app FOREVER?我只是想启动一个应用程序并关闭我的copmputer。我的应用应该在远程服务器的后台工作。
答案 0 :(得分:56)
您可能还想考虑使用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
答案 1 :(得分:28)
两个答案:一个用于Windows,一个用于* nix:
在Windows上,您可以使用start
命令启动与cmd.exe
实例断开连接的流程:
start node example.js
在* nix上,有两个方面:断开进程与控制台的连接,并确保它没有收到HUP
信号(“挂断”),大多数进程(包括节点)将通过终止来回应。前者可能是可选的,但后者是必要的。
从控制台开始断开连接非常简单:通常,您只需在命令行末尾添加&符号(&
):
# Keep reading, don't just grab this and use it
node example.js &
但以上并不能保护进程免受HUP
信号的影响。关闭shell(控制台)时,程序可能会收到HUP
,也可能不会收到huponexit
,具体取决于名为huponexit
的shell选项。如果true
为HUP
,则当shell退出时,该过程将收到huponexit
,并且可能会终止。
false
对我使用过的各种Linux变体默认为huponexit
,实际上我很乐意使用上述内容多年,直到coderjoe和其他人帮助我理解(非常可能已被删除的答案下的长评论流)我依赖false
为huponexit
。
为避免环境中true
成为nohup
的可能性,请明确使用nohup
。 HUP
运行过程免受nohup node example.js > /dev/null &
信号的影响。你这样使用它:
nohup node example.js > your-desired-filename-or-stream-here &
或
nohup.out
重定向很重要;如果你不这样做,你最终会得到一个包含stdout
和stderr
输出的nohup
文件。 (默认情况下,stderr
会将stdout
重定向到stdout
,如果nohup.out
正在输出到终端,则会将其重定向到nohup
。stdin
如果它是从终端接收的,也会重定向man nohup
,因此我们不必这样做。有关详细信息,请参阅info coreutils 'nohup invocation'
或{{1}}。)
通常对于这些事情,您希望使用进程监视器,以便在进程因某种原因崩溃时,监视器会重新启动它,但上面的 可以用于简单的情况。
答案 2 :(得分:18)
总是,简单是最好的,不需要暴发户,不需要永远,只是nohup:
nohup node file.js &
相信我,我正在为我的情况而奔跑!
答案 3 :(得分:8)
我肯定会推荐pm2
npm install -g pm2
启动服务器:pm2 start [yourServerFile.js]
停止服务器:pm2停止[yourServerFile.js]
关闭客户端和服务器将永远运行....如果应用程序崩溃,也会重新启动 我已经在Ubuntu上运行节点服务器几个月没有问题
答案 4 :(得分:4)
您可以像这样使用npm永久安装:
sudo npm install -g forever
或作为服务
forever start server.js
或停止服务
forever stop server.js
列出所有正在运行的进程:
forever list
答案 5 :(得分:3)
node expamle.js &
答案 6 :(得分:3)
答案 7 :(得分:1)
这只是 Windows 的部分答案。我创建了一个名为app.vbs
的单行Visual Basic脚本,它将在隐藏窗口中启动您的节点应用程序:
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/
答案 8 :(得分:1)
我有类似的问题,我认为永远使用将有助于处理崩溃和重新启动
您可以全局安装:
sudo nom install -g forever
运行此命令:
nohup forever server.js &
这应该可以解决关闭终端,关闭ssh会话,节点崩溃和重启的所有麻烦。
答案 9 :(得分:1)
如果您在生产环境中运行node.js,则应考虑使用PM2,forever.js或Nodemon。
在线比较不同包装的文章并不缺乏。
答案 10 :(得分:1)
哇,我刚刚找到了一个非常简单的解决方案:
首先,启动您的流程(节点应用)
forever dist/index.js
运行:^Z
cmd + z。
然后:bg
。是的。背景(背景)。
和..你出去了。
如果您使用exit
,请使用ssh
完成操作,或者仅关闭终端。
答案 11 :(得分:0)
我的 start.sh 文件:
#/bin/bash
nohup forever -c php artisan your:command >>storage/logs/yourcommand.log 2>&1 &
只有一件重要的事情。第一个命令必须为“ nohup”,第二个命令必须为“ forever”,“-c”参数为永远的参数,“ 2>&1&”区域为“ nohup”。运行完此行后,您可以从终端注销,重新登录并运行“永远重启全部”,您可以重新启动,并且可以确保如果脚本停止然后永远重新启动它。
我<3永远