azure在云服务中重新运行启动任务而无需重新启动角色

时间:2014-11-04 14:58:29

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

我有一个azure云服务启动任务,可以创建一个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

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

我会提出三点建议。

  1. 确保PhantomJS不会死亡。从个人经验来看,我知道这可能非常艰难。
  2. 打包并部署.exe,确保PhantomJS进程始终在运行。它可以监视正在运行的进程,如果它注意到PhantomJS进程已经死了,它将重新启动它。
  3. 创建一个特殊端点,允许您远程/按需重新启动进程。由于安全问题,这是最后一个选项。这是可能的,但不推荐。