Azure启动任务挂起
我有一个具有MVC4角色的Azure项目,其中我添加了Visual C++ 2012 Runtime Library安装文件以及一个用于以静默方式安装它的脚本。Azure启动任务挂起
该脚本和库安装的功能,唯一的问题是,任务无法完成,安装过程永远不会退出,然后阻止从开始的角色:我使用远程连接到服务器
桌面,并通过查看任务管理器,我可以看到进程vcredist_x64.exe:(他们实际上是2,但我认为这是正常的)
当我用鼠标右键单击并终止进程,部署成功完成,角色启动。
这是当我启动任务设置为简单在ServiceDefinition.csdef中,因为这使服务器等到任务完成后启动角色的问题。所以我所做的就是将任务设置为背景,所以启动脚本不会阻止角色再次启动,但即使如此,该过程仍在后台运行,必须手动终止。
这个脚本应该工作,并与2010年的VC++库有前(如果没有退出,虽然,但应该是有,以避免阻塞的作用,如果脚本返回错误代码):
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
日志说一切正常。
我可以避免通过将启动任务设置为背景而不是简单地阻止角色被阻止,但这并不能真正解决问题。谢谢。
我想通了,为什么这个由史蒂夫·马克思的发生,这要归功于this blog post。
此问题只在Windows Server 2008出现SP2 ,所以只好将主机更改为Windows Server 2008 R2 。
这可以通过在所有的ServiceConfiguration文件的改变osFamily="1"
到osFamily="2"
来完成,也可以从Azure的门户网站通过单击服务,然后配置OS顶部被改变。
我也需要使用这个库。 这是我的脚本:
start /w
cd startup
vcredist_x64.exe /q /norestart
exit /b 0
它的工作对我来说 - 启动是我保持vcredist_x64.exe。
我的服务定义文件,这是XML线
<Task commandLine="startup\InstallVcreditst.cmd" executionContext="elevated" taskType="simple" />
感谢您的答案,但我们的脚本几乎完全相同,除了只生成命令行的开始/ w,它会阻止云上的安装,所以它应该只在本地使用。 –
您是否尝试过从RDP手动运行(没有/ quiet)?怎么了?有错误吗? – smarx
我刚刚得到可以修复,卸载或关闭的对话框。只有当Azure在部署时尝试运行它时,此过程才会挂起,我会在此处尝试一些更多的事情,看看会发生什么。 –
如果你用/ quiet运行它,我认为它成功完成了?您可能想尝试使用psexec作为本地系统用户运行。请参阅http://blog.smarx.com/posts/windows-azure-startup-tasks-tips-tricks-and-gotchas。 – smarx