高级应用程序的Powershell在Azure Web应用程序上重新启动
问题描述:
可以使用Restart-Azure Rm Web App PowerShell重新启动Web应用程序,但这将同时重新启动计划中的所有服务器,从而缩短停机时间。高级应用程序的Powershell在Azure Web应用程序上重新启动
Azure门户具有“高级应用程序重新启动”功能,该功能在重新启动各个实例之间使用时间延迟。
有没有办法从PowerShell调用它?
答
根据您的描述,我建议您可以首先使用Get-AzureRmResource命令在您的Web应用程序中查找每个实例的进程。然后你可以使用Remove-AzureRmResource来停止这些进程。然后,当您访问Azure Web应用程序时,Azure会自动创建新实例的进程以运行您的应用程序。
更多细节,你可以参考下面的PowerShell代码:
Login-AzureRmAccount
Select-AzureRmSubscription -SubscriptionId '{your subscriptionid}'
$siteName = "{sitename}"
$rgGroup = "{groupname}"
$webSiteInstances = @()
#This gives you list of instances
$webSiteInstances = Get-AzureRmResource -ResourceGroupName $rgGroup -ResourceType Microsoft.Web/sites/instances -ResourceName $siteName -ApiVersion 2015-11-01
$sub = (Get-AzureRmContext).Subscription.SubscriptionId
foreach ($instance in $webSiteInstances)
{
$instanceId = $instance.Name
"Going to enumerate all processes on {0} instance" -f $instanceId
# This gives you list of processes running
# on a particular instance
$processList = Get-AzureRmResource `
-ResourceId /subscriptions/$sub/resourceGroups/$rgGroup/providers/Microsoft.Web/sites/$sitename/instances/$instanceId/processes `
-ApiVersion 2015-08-01
foreach ($process in $processList)
{
if ($process.Properties.Name -eq "w3wp")
{
$resourceId = "/subscriptions/$sub/resourceGroups/$rgGroup/providers/Microsoft.Web/sites/$sitename/instances/$instanceId/processes/" + $process.Properties.Id
$processInfoJson = Get-AzureRmResource -ResourceId $resourceId -ApiVersion 2015-08-01
# is_scm_site is a property which is set
# on the worker process for the KUDU
$computerName = $processInfoJson.Properties.Environment_variables.COMPUTERNAME
if ($processInfoJson.Properties.is_scm_site -ne $true)
{
$computerName = $processInfoJson.Properties.Environment_variables.COMPUTERNAME
"Instance ID" + $instanceId + "is for " + $computerName
"Going to stop this process " + $processInfoJson.Name + " with PID " + $processInfoJson.Properties.Id
# Remove-AzureRMResource finally STOPS the worker process
$result = Remove-AzureRmResource -ResourceId $resourceId -ApiVersion 2015-08-01 -Force
if ($result -eq $true)
{
"Process {0} stopped " -f $processInfoJson.Properties.Id
}
}
}
}
}
+0
这是一种很好的,可行的方法实现。希望在某些时候它只是Restart- Azure Rm Web App cmdlet的一个选项。 –
有任何更新,如果你觉得我的回答是有用/有帮助。请将其标记为答案,以便其他人可以从中受益。 –