2017-04-13 59 views
0

我從構建服務器調用遠程PowerShell腳本。問題是,當遠程腳本運行時間超過一分鐘時,MSDeploy將在完成時掛起。MSDeploy在調用遠程Powershell 2.0時掛起

MSDeploy的輸出是這樣的:

 
Info: Sleeping for a minute... 
Info: Done sleeping! 
Info: The process 'C:\Windows\system32\cmd.exe' (command line '') exited with code '0x0'. 

遠程過程顯然結束,但MSDeploy失敗,如果它運行不到一分鐘更長的時間才能識別它。我們正在運行的MSDeploy命令如下:

"C:\Program Files (x86)\IIS\Microsoft Web Deploy V3\msdeploy.exe" -verb:sync -source:runCommand="powershell.exe -File D:\test\command.ps1 < NUL",waitInterval=2147483647,successReturnCodes=0;2 -dest:auto,ComputerName='https://someurl.com',AuthType=Basic,UserName='someusername',Password='somepassword' -allowUntrusted -useCheckSum -Verbose -Debug 

注意如何我已經包括管道中NUL到進程。這是爲了重定向遠程powershell進程STDIN,因爲當STDIN被重定向時它顯然可以遠程掛起。它必須手動關閉。

我看到了很多帖子在stackoverflow表明這將解決這個問題。我也能夠使< NUL修復程序在另一個環境中工作。

我也看過帖子比推薦設置標誌-InputFormant None,但那也行不通。

比方說,我有2臺服務器 - Build Server ARemote Server A。無論我申請什麼修正,即使Remote Server A完成運行Powershell腳本並宣佈其返回代碼,Build Server A上的MSDeploy仍會掛起。

比方說,我有2個更多的服務器 - Build Server BRemote Server B。我已經應用的修復在這些服務器上工作,MSDeploy 不會掛起。

兩種環境(A和B)都使用Powershell 2.0和MSDeploy 7.1.1955.0版。

有輸出一個區別,我注意到的是:當與-Verbose-Debug標誌運行這兩個進程,構建服務器A吐出:

信息:過程C:\ Windows \ System32下\ cmd.exe'(命令行)'用代碼'0x0'退出。

生成服務器乙吐出:

的信息:該過程 'C:\ Windows \ System32下\ cmd.exe的'(命令行 '')退出,代碼值爲 '0x0'。

詳細:同步完成1遍。

構建服務器B(不掛起)在其Verbose輸出中提到它已成功同步。構建服務器A不。

不幸的是,我們無法及時升級PowerShell或MSDeploy。有沒有人有任何見解?

+0

由於您的構建和服務器配置,您的問題對您非常具體,因爲我們無法訪問您的特定環境,所以我不認爲其他人將能夠重現該錯誤。一個[最小,完整和可驗證的例子](http://stackoverflow.com/help/mcve)會有所幫助,但我認爲在這種情況下是不可能的。 –

+0

我已經盡我所能在環境中找到差異。他們看起來一樣。 Windows 2008,powershell 2.0和msdeploy版本7.1.1955.0 –

+0

除此之外,我什麼也沒有繼續下去。我們已經堅持了幾個星期。我想不出任何可能導致此問題的服務器配置或環境差異。 –

回答

0

我們發現問題所在。

顯然,MSDeploy在調用遠程腳本時使用多個連接。我們的網絡有一個超時,並且正在消除負責返回狀態的連接。這是因爲只有遠程腳本完成後纔會使用返回狀態的連接。發回任何東西花了太長時間。 STDOUT的連接不受影響,因爲它正在發送像健康連接一樣的數據包。

解決這個問題和增加網絡設置中的超時時間一樣簡單。我無法向你解釋這是多麼令人沮喪。這是一個好的一週半的工作。希望這有助於未來的人。

相關問題