【问题标题】:Azure start-up task hangsAzure 启动任务挂起
【发布时间】:2012-08-31 12:46:04
【问题描述】:

我有一个带有 MVC4 角色的 Azure 项目,我在其中添加了 Visual C++ 2012 Runtime Library 安装文件和一个静默安装它的脚本。

脚本运行并且库被安装,唯一的问题是任务永远不会完成并且安装过程永远不会退出,然后阻止角色启动:

我使用远程桌面连接到服务器,通过查看任务管理器可以看到进程vcredist_x64.exe:(实际上有2个,但我认为这是正常的)

当我右键单击并终止进程时,部署成功完成并启动角色。

当我的启动任务在 ServiceDefinition.csdef 中设置为 simple 时,这是一个问题,因为这会使服务器等到任务完成才能启动角色。所以我所做的就是将任务设置为 background 以便启动脚本不再阻止角色启动,但即便如此,该进程仍在后台运行并且必须被杀死手动。

这个脚本应该可以工作,并且以前在 2010 VC++ 库中使用过(虽然没有 EXIT,但应该存在以避免在脚本返回错误代码时阻塞角色):

vcredist_x64.exe /quiet /norestart
EXIT /B 0

没有工作,所以我想我会在安装后手动终止该进程:

vcredist_x64.exe /quiet /norestart
TASKKILL /F /T /IM vcredist_x64.exe
EXIT /B 0

没用,进程还活着。如果我自己在服务器上或本地手动运行该脚本实际上可以工作,但是当 Azure 在部署期间尝试执行此操作时,它会挂起。

我的启动任务在 ServiceDefinition.csdef 中是这样定义的:

<Startup>
  <Task commandLine="InstallVcRedist.cmd" executionContext="elevated" taskType="background" />
</Startup>

C:\Resources\temp\{RoleId.RoleName}\RoleTemp 中的日志表明一切正常。

我可以通过将启动任务设置为后台而不是简单来避免角色被阻止,但这并不能真正解决问题。谢谢。

【问题讨论】:

  • 您是否尝试过从 RDP 手动运行它(没有 /quiet)?发生什么了?有错误吗?
  • 我只是得到可以修复、卸载或关闭的对话框。该进程仅在 Azure 尝试在部署时运行它时挂起,我将在此处尝试更多操作,看看会发生什么。
  • 如果您使用 /quiet 运行它,我认为它会成功完成?您可能想尝试 psexec 以本地系统用户身份运行。见blog.smarx.com/posts/…。
  • 是的,使用 /quiet 会成功运行并退出。我尝试 psexec 以 SYSTEM 身份运行它,它运行良好。我将解决方案发布到不同的服务并遇到了同样的问题。项目中必须配置错误,因为它显然适用于 Ram。我在脚本中添加了echo %ERRORLEVEL% &gt;&gt; c:\tasklog.txt,但它没有创建文件,只有当我手动运行脚本时它才会创建,奇怪。我会尝试缩小问题的范围。感谢您迄今为止的帮助!
  • 我通过您链接的帖子看到了您的另一篇帖子,并阅读了您在底部关于将 FamilyOS 更改为 2 的说明,并且成功了!你指出来是件好事,谢谢:)

标签: .net azure windows-server-2008 visual-c++-2012


【解决方案1】:

感谢史蒂夫·马克思的this blog post,我弄清楚了为什么会发生这种情况。

此问题仅在 Windows Server 2008 SP2 中出现,因此我不得不将主机更改为 Windows Server 2008 R2。
这可以通过在所有 ServiceConfiguration 文件中将 osFamily="1" 更改为 osFamily="2" 来完成,或者可以通过单击服务然后从 Azure 门户中进行更改配置操作系统 在顶部。

【讨论】:

    【解决方案2】:

    我也需要使用这个库。 这是我的脚本:

    start /w
    cd startup
    vcredist_x64.exe /q /norestart
    
    exit /b 0
    

    它对我有用 - 启动是我保存 vcredist_x64.exe 的地方。

    在我的 servicedefinition 文件中,这是 xml 行

     <Task commandLine="startup\InstallVcreditst.cmd" executionContext="elevated" taskType="simple" />
    

    【讨论】:

    • 感谢您的回答,但我们的脚本几乎相同,除了 start /w 仅生成命令行,它会阻止云上的安装,因此只能在本地使用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多