Azure WebApp-如何使用Powershell或API重新启动单个实例

Azure WebApp-如何使用Powershell或API重新启动单个实例,powershell,azure,web-applications,azure-powershell,azure-web-app-service,Powershell,Azure,Web Applications,Azure Powershell,Azure Web App Service,我们正在运行一个包含3个实例的WebApp。我们希望在夜间分别重新启动这些实例。我正试图找到一个Powershell或REST API解决方案来与cron作业一起工作,但我只想到了重新启动整个WebApp的解决方案 我们知道重新启动它们的手动过程(下面的屏幕截图链接),但我们希望自动化该过程 如果您正在查看Windows Azure PowerShell cmdlet,您要使用的命令是Reset AzureRoleInstance()是的,您可以使用Azure Power Shell来执行此操作

我们正在运行一个包含3个实例的WebApp。我们希望在夜间分别重新启动这些实例。我正试图找到一个Powershell或REST API解决方案来与cron作业一起工作,但我只想到了重新启动整个WebApp的解决方案

我们知道重新启动它们的手动过程(下面的屏幕截图链接),但我们希望自动化该过程


如果您正在查看Windows Azure PowerShell cmdlet,您要使用的命令是Reset AzureRoleInstance()

是的,您可以使用Azure Power Shell来执行此操作,请检查此项

根据您的描述,我建议您首先使用
getazurermresource
命令在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
                }
            }       
       }

    }
}

这只支持ASM型号?@thuang这是一个错误的答案。它只适用于Azure云服务器(经典版),OP希望重新启动web应用程序实例。@胜宝水MSFT这是正确的a类应用程序服务instance@KentRozenberg这是可能的,你可以检查我的答案。太棒了,我已经测试过了。很高兴您能提供帮助,因为我的Azure支持工程师说没有办法这样做,所以我对此感到气馁。:)@如果我的答案有效,请别忘了接受它作为答案。