在一台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的初学者。
当前回答
不需要安装其他包。
执行此命令
node server.js > stdout.txt 2> stderr.txt &
server.js是你的服务器文件,也可以是api.js
之后,点击“退出”关闭终端
exit
其他回答
我希望这对你有所帮助。
在命令行,永远安装:
npm install forever -g
创建一个示例文件:
sudo nano server.js
您可以编辑该文件并直接在浏览器中获得结果。 您可以使用filezilla或任何编辑器来编辑该文件。 运行文件:
forever start --minUptime 1 --spinSleepTime 1000 -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节点your_path/server.js &后,简单地单击一下就关闭了Putty终端。您应该使用exit命令,然后您的节点服务器将启动并运行。
Forever是一个非常好的NodeJs模块。
通过在命令行中输入永远安装
$ npm install forever -g
然后使用以下命令运行node.js脚本
$ forever start /path/to/script.js
你可以出发了。此外,你可以运行
$ forever list
查看所有正在运行的脚本。您可以通过键入来终止任何特定的脚本
$ forever stop [pid]
其中[pid]是通过list命令获取的脚本的进程号。要停止所有脚本,您可以输入
$ forever stopall
你可以简单地使用这个
nohup node /srv/www/MyUserAccount/server/server.js &
这将保持应用程序运行,关闭它,你将不得不杀死它。
为此,你可以安装htop,然后搜索节点,然后杀死它
nohup工作,我检查了AWS ubto vm遵循正确的语法
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