【问题标题】:azure re-run startup task in cloud service without restarting role天蓝色在云服务中重新运行启动任务而不重新启动角色
【发布时间】:2023-03-29 02:13:01
【问题描述】:

我有一个天蓝色的云服务启动任务,它创建了一个 PhantomJS 进程,该进程在后台托管一个 Web 服务器。有时需要重启 PhantomJS 进程。

如何重新运行此启动任务而无需执行完整的角色回收?

我有一个端点,我每 5 分钟点击一次以检查 PhantomJS 进程的状态,如果它返回失败,我想重新启动这个进程。

我宁愿不要在 asp.net 中使用 Process.Start,因为这样我就不得不担心凭据和用户模拟来启动进程备份。

我的启动任务运行以下...

START /B "my_log.txt >>" /D "%~dp0" phantomjs2.exe --local-to-remote-url-access=true --ignore-ssl-errors=true js\renderHtmlWebServer.js >> "%TEMP%\PhantomJS_%datetimef%.txt" 2>&1

【问题讨论】:

    标签: asp.net iis azure phantomjs azure-cloud-services


    【解决方案1】:

    您无法在不重新启动角色的情况下重新运行您的启动任务,但您可以将该代码移动到 WebRole.cs 中的 Run 方法中。 run 方法运行在 WaIISHost.exe(或工作角色的 WaWorkerHost.exe)中,这是与启动任务相同的用户上下文(由来宾代理创建的虚拟帐户),与 w3wp/asp.net (作为标准网络用户运行)。

    但是,一个更好的问题可能是 - 为什么您的 PhantomJS 进程仍未运行?如果预计由于不活动或类似情况而关闭,那么只需重新启动它就可以了。但如果它因未知原因而关闭,那么您可能会考虑将角色视为处于未知的健康状态并回收整个角色。

    【讨论】:

      【解决方案2】:

      我将提供三个建议。

      1. 确保 PhantomJS 不会死。根据个人经验,我知道这真的很难。
      2. 打包并部署一个确保 PhantomJS 进程始终运行的 .exe。它可以监控正在运行的进程,如果发现 PhantomJS 进程已死,它会重新启动它。
      3. 创建一个允许您远程/按需重新启动进程的特殊端点。由于安全问题,这是最后一个选项。有可能,但不推荐。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-11-05
        • 2020-08-23
        • 1970-01-01
        • 1970-01-01
        • 2011-03-08
        • 2011-04-21
        相关资源
        最近更新 更多