node.js - 保持 Node 应用程序在azure应用程序服务上运行

标签 node.js azure azure-web-app-service iisnode

我已经在 azure 的应用程序服务上部署了一个 Node js Web 应用程序。问题是我的应用程序偶尔会因未知原因被终止。我已经使用 kudu 对所有日志罚款进行了详尽的搜索。

如果我重新启动应用程序服务,应用程序就会开始工作。

有什么方法可以在 Node 应用程序崩溃后重新启动它。无论如何都要永远奔跑。例如,如果部署在 IIS 中的 asp.net 代码发生任何错误,IIS 永远不会崩溃,它会继续为其他传入请求提供服务。

类似于在azure应用程序服务中使用forever/pm2。

最佳答案

Azure 应用服务中的node.js 由 IISNode 提供支持,它会处理您所描述的一切,包括监视您的进程是否出现故障并重新启动它。

考虑以下 POC:

var http = require('http');    
http.createServer(function (req, res) {
    if (req.url == '/bad') {
        throw 'bad';
    }
    res.writeHead(200, {'Content-Type': 'text/plain'});
    res.end('bye');
}).listen(process.env.PORT || 1337);

如果我将其托管在 Web 应用程序中并发出以下请求序列:

  1. 获取/
  2. 获取/坏
  3. 获取/

然后第一个将产生 HTTP 200,第二个将抛出到服务器上并产生 HTTP 500,第三个将产生 HTTP 200,而我无需执行任何操作。 IISNode 将仅检测崩溃并重新启动进程。

因此,您不需要 PM2 或类似的解决方案,因为它是内置于应用服务中的。但是,如果您确实愿意,他们现在在 Linux 上提供了应用服务预览版,它由 PM2 提供支持并允许您配置 PM2。更多关于此here 。但你已经把它开箱即用了。

另一个需要考虑的事情是 Always On setting默认情况下处于打开状态:

By default, web apps are unloaded if they are idle for some period of time. This lets the system conserve resources. In Basic or Standard mode, you can enable Always On to keep the app loaded all the time. If your app runs continuous web jobs, you should enable Always On, or the web jobs may not run reliably.

这是导致您的问题的另一个可能的根本原因,解决方案是禁用 Web 应用程序的“始终开启”(请参阅​​上面的链接)。

关于node.js - 保持 Node 应用程序在azure应用程序服务上运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40074044/

相关文章:

node.js - 无法读取 Node 中获取的帖子

node.js - Facebook 身份验证无法正常工作(部署在 OpenShift 上)

c# - 在 C#.Net 中的 Azure 函数中查询 Azure Application Insights CustomEvents

Azure Next.js 部署。所需结构

azure - 我的 Azure 应用服务是否可以使用不同的身份验证提供程序?

javascript - 下载文件时 Node 渲染进程消失

javascript - 在 Node js 中使用模块并重新赋值

c# - Azure Blob 存储 SAS token 未正确形成 .NET

azure - 如何从azure eventhub获取记录到databricks

Azure WebApps - 它们是否由 Microsoft 修补?