PsExec trava intermitentemente ao chamar o AppCmd

2

Temos um processo de implantação automatizado que é gerenciado principalmente por um arquivo em lote. Uma das primeiras etapas desse processo é parar um AppPool do IIS para que os arquivos atualizados possam ser copiados com segurança. Para fazer isso, chamamos PsExec assim:

PsExec.exe -accepteula %WEB_SERVER_MACHINE_NAME% cmd /c %%systemroot%%\system32\inetsrv\AppCmd.exe stop apppool /apppool.name:"%APP_POOL_NAME%" 2>&1

Onde estão as variáveis de ambiente (estes não são os valores reais, apenas para ilustração):

  • WEB_SERVER_MACHINE_NAME=\WEBSERVER01
  • APP_POOL_NAME=APP01

Todo o processo de implantação geralmente leva apenas alguns minutos. No entanto, parece que às vezes, aparentemente de forma aleatória, esse processo fica preso nesta etapa e parece esperar indefinidamente. Se eu verificar o servidor da web durante esse processo, AppPool não será interrompido e a parada manual de AppPool não terá efeito. Existem 6 sites diferentes que precisam ser implantados e isso pode acontecer em qualquer um dos sites.

Eu também tentei desativar a inicialização automática assim:

PsExec.exe -accepteula %WEB_SERVER_MACHINE_NAME% cmd /c %%systemroot%%\system32\inetsrv\AppCmd.exe set apppool /apppool.name:"%APP_POOL_NAME%" /autoStart:false 2>&1

E ocasionalmente, mas parece ficar parado neste passo às vezes. Então, parece ser um problema com PsExec em vez de AppCmd . Eu também tentei especificar um tempo limite de conexão para PsExec , bem como encadear uma saída no final da chamada cmd , assim:

PsExec.exe -accepteula -n 60 %WEB_SERVER_MACHINE_NAME% cmd /c %%systemroot%%\system32\inetsrv\AppCmd.exe stop apppool /apppool.name:"%APP_POOL_NAME%" ^& exit 0 2>&1

Alguém já encontrou esse problema antes? O que poderia fazer com que essa chamada de PsExec parasse intermitentemente?

    
por p.s.w.g 29.01.2014 / 18:18

1 resposta

0

O uso do WMIC parece mais confiável (embora não seja perfeito). Aqui está o que acabei usando:

wmic /node:"%WEB_SERVER_MACHINE_NAME%" /namespace:\root\WebAdministration path ApplicationPool where name='%APP_POOL_NAME%' call start

wmic /node:"%WEB_SERVER_MACHINE_NAME%" /namespace:\root\WebAdministration path ApplicationPool where name='%APP_POOL_NAME%' set AutoStart=true
    
por 05.02.2014 / 18:10