用于在 Azure Web 应用程序上重新启动高级应用程序的 Powershell [英] Powershell for an Advanced Application Restart on an Azure Web App

查看:21
本文介绍了用于在 Azure Web 应用程序上重新启动高级应用程序的 Powershell的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

可以使用 Restart- Azure Rm Web App PowerShell 重新启动 Web 应用程序,但这将同时重新启动计划中的所有服务器,从而缩短停机时间.

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.

Azure 门户具有高级应用程序重启"功能,该功能使用重启各个实例之间的时间延迟.

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

有没有办法从 PowerShell 调用它?

Is there any way to invoke that from PowerShell?

推荐答案

根据您的描述,我建议您可以先在您的Web 应用程序中使用Get-AzureRmResource 命令找到每个实例的进程.然后你可以使用 Remove-AzureRmResource 来停止这些进程.然后当您访问 azure web 应用程序时,azure 会自动创建新实例的进程来运行您的应用程序.

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.

更多细节,你可以参考下面的powershell代码:

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

    }
}

结果:

这篇关于用于在 Azure Web 应用程序上重新启动高级应用程序的 Powershell的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆