如何在Windows服务器上将一个node.js文件作为后台进程运行?

7

我正在创建一个node.js项目,并将其上传到我的Windows服务器上,为移动应用程序提供API服务。

当我打开命令提示符并输入以下内容时:

node app.js

它可以正常运行,但是当我关闭命令提示符时,我的node.js服务器停止运行。

如何让它在我关闭命令提示符后仍然运行?

例如,在Ubuntu上,我使用以下命令:

nohup 

如何在Windows上实现这个功能?

不要制作控制台程序,而要制作图形用户界面程序。 - user6017774
将您的项目作为系统服务运行:os-service - MC ND
4个回答

14

1
Nodemon很赞。在Windows上,Forever并没有真正地监视文件,只是随意观察它们,而pm2则会在每次加载页面时重新启动服务器。
这些工具都有类似的功能,并且每个工具的安装方式都与接受的答案中一样。例如:
npm install nodemon -g

这将全局安装nodemon,使用时只需导航到您的项目文件夹并输入以下命令:
nodemon

(假设你的项目有一个app.js文件)。您可以添加-w开关,就像Forever和pm2一样,但是如果您只想观看所有文件,则可以省略该选项。要在后台使用Forever运行nodemon,您可以运行以下命令:
forever nodemon --exitcrash 

Nodemon适用于开发,尤其是在Windows上,而Forever和pm2更适用于生产环境,在Linux上。


1
这里有一个更简单的答案,没有像前两个答案中描述的那样添加任何库或开销。要将您的Node.js应用程序作为无窗口启动程序在后台运行(这类似于Linux中的“nohup”),请修改此模板并将其复制到.VBS脚本文件中。然后将该文件复制到您的开始菜单启动文件夹(对于所有用户来说,即C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup),它将自动运行。在Visual Basic中使用的技术是(1)通过首先更改shell对象的工作目录来准备运行Node.js应用程序,以及(2)通过在run函数之后立即添加“,0”来通知shell在隐藏窗口中运行Node.js应用程序:
Dim objShell
Set objShell = WScript.CreateObject("WScript.Shell")
objShell.CurrentDirectory = "C:\path-to-your-node-js-app\"
objShell.Run("""node"" your-app.js"), 0
Set objShell = Nothing

参考资料:

https://keestalkstech.com/2016/07/start-nodejs-app-windowless-windows/ https://devblogs.microsoft.com/scripting/how-can-i-change-the-working-folder-of-a-script/


-4

不行,你不能这样做。

即使你制作了一个GUI程序,你仍然需要通过控制台运行它。

而且一旦你关闭命令提示符,你的服务就会立即停止/终止。因为Node在运行时创建了一个服务器:http.createServer().listen(port)app.listen(port)。所以这使得它具有独立性质。

因此,一旦你关闭了服务器所在的命令提示符,所有的服务都将在那一刻停止。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接