Powershell for an Advanced Application Restart on an Azure Web App

£可爱£侵袭症+ 提交于 2019-12-18 13:32:24

问题


It is possible to use Restart-​Azure​Rm​Web​App PowerShell to restart a web app but this will restart all servers in the plan simultaneously, giving a short downtime.

The Azure Portal has an "Advanced Application Restart" feature that uses a time delay between restarting individual instances.

Is there any way to invoke that from PowerShell?


回答1:


According to your description, I suggest you could firstly find each instance's process in your web app by using Get-AzureRmResource command. Then you could use Remove-AzureRmResource to stop these processes. Then when you access the azure web application, azure will automatic create new instance's process to run your application.

More details, you could refer to below powershell codes:

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
                }
            }       
       }

    }
}

Result:



来源:https://stackoverflow.com/questions/43810248/powershell-for-an-advanced-application-restart-on-an-azure-web-app

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!