Executar scripts em sua VM Linux usando o recurso Executar Comando

Cuidado

Este artigo faz referência ao CentOS, uma distribuição do Linux que está se aproximando do status de EOL (fim da vida útil). Considere seu uso e planeje adequadamente. Para obter mais informações, veja as Diretrizes sobre fim da vida útil do CentOS.

Aplica-se a: ✔️ VMs do Linux ✔️ Conjuntos de dimensionamento flexíveis

O recurso Executar Comando usa o agente da máquina virtual (VM) para executar scripts de shell dentro de uma VM Linux do Azure. Use esses scripts para o gerenciamento geral de máquinas ou aplicativos. Eles podem ajudá-lo a diagnosticar e corrigir rapidamente problemas de rede e acesso à VM e colocar a VM em um bom estado.

Benefícios

Acesse as máquinas virtuais de várias maneiras. O recurso Executar Comando pode executar scripts em suas máquinas virtuais remotamente usando o agente de VM. Use o comando Executar por meio do portal do Azure, API REST ou CLI do Azure para VMs do Linux.

Esse recurso é útil em todos os cenários em que você deseja executar um script em uma máquina virtual. É uma das únicas maneiras de solucionar problemas e corrigir uma máquina virtual que não tem a porta RDP ou SSH aberta devido à configuração da rede ou do usuário administrativo.

Pré-requisitos

Distribuições Linux Compatíveis

Distribuição Linux x64 ARM64
Alma Linux 9.x+ 9.x+
CentOS 7.x+, 8.x+ 7.x+
Debian Mais de 10 11.x+
Flatcar Linux 3374.2.x+ 3374.2.x+
Azure Linux 2. x 2. x
openSUSE 12.3+ Sem suporte
Oracle Linux 6.4+, 7.x+, 8.x+ Sem suporte
Red Hat Enterprise Linux 6.7+, 7.x+, 8.x+ 8.6+, 9.0+
Rocky Linux 9.x+ 9.x+
SLES 12.x+, 15.x+ 15.x SP4+
Ubuntu 18.04+, 20.04+, 22.04+ 20.04+, 22.04+

Restrições

As seguintes restrições se aplicam ao usar o recurso Executar Comando:

  • A saída está limitada aos últimos 4.096 bytes.
  • O tempo mínimo para executar um script é de cerca de 20 segundos.
  • Scripts executados por padrão como um usuário com privilégios elevados no Linux.
  • É possível executar um script por vez.
  • Scripts que solicitam informações (modo interativo) não têm suporte.
  • Não é possível cancelar um script em execução.
  • O tempo máximo que um script pode ser executado é 90 minutos. Depois disso, o script atingirá o tempo limite.
  • A conectividade de saída da VM é necessária para retornar os resultados do script.

Observação

Para funcionar corretamente, Executar Comando requer conectividade (porta 443) a endereços IP públicos do Azure. Se a extensão não tiver acesso a esses pontos de extremidade, os scripts poderão ser executados com êxito, mas não retornarão os resultados. Se você estiver bloqueando o tráfego na máquina virtual, poderá usar marcas de serviço para permitir o tráfego para os endereços IP públicos do Azure usando a marca AzureCloud.

Comandos disponíveis

Esta tabela mostra a lista de comandos disponíveis para VMs Linux. Use o comando RunShellScript para executar qualquer script personalizado que desejar. Quando você estiver usando a CLI do Azure ou o PowerShell para executar um comando, o valor fornecido para o parâmetro --command-id ou -CommandId deverá ser um dos seguintes valores listados. Quando especifica um valor que não é um comando disponível, recebe este erro:

The entity was not found in this Azure location
Nome Descrição
RunShellScript Executa um script de shell do Linux.
ifconfig Obtém a configuração de todas as interfaces de rede.

CLI do Azure

O exemplo a seguir usa o comando az vm run-command para executar um script de shell em uma VM Linux do Azure.

az vm run-command invoke -g myResourceGroup -n myVm --command-id RunShellScript --scripts "apt-get update && apt-get install -y nginx"

Observação

Para executar comandos como um usuário diferente, insira sudo -u para especificar uma conta de usuário.

Portal do Azure

Acesse uma VM no portal do Azure e selecione Executar comando no menu à esquerda, em Operações. Você vê uma lista dos comandos disponíveis a serem executados na VM.

Lista de comandos

Escolha um comando a ser executado. Alguns dos comandos podem ter parâmetros de entrada obrigatórios ou opcionais. Para esses comandos, os parâmetros são apresentados como campos de texto para você fornecer os valores de entrada. Para cada comando, é possível exibir o script que está em execução expandindo Exibir script. RunShellScript é diferente dos outros comandos, uma vez que permite a você fornecer seu próprio script personalizado.

Observação

Os comandos internos não podem ser editados.

Depois de escolher o comando, selecione Executar para executar o script. Quando o script for concluído, ele retornará a saída e os erros na janela de saída. A captura de tela a seguir mostra um exemplo de saída da execução do comando ifconfig.

Executar saída de script de comando

PowerShell

O exemplo a seguir usa o cmdlet Invoke-AzVMRunCommand para executar um script do PowerShell em uma VM do Azure. O cmdlet espera que o script referenciado no parâmetro -ScriptPath seja o local onde o cmdlet é executado.

Invoke-AzVMRunCommand -ResourceGroupName '<myResourceGroup>' -Name '<myVMName>' -CommandId 'RunShellScript' -ScriptPath '<pathToScript>' -Parameter @{"arg1" = "var1";"arg2" = "var2"}

Limitando o acesso ao recurso Executar Comando

Listar os comandos de execução ou mostrar os detalhes de um comando requer a permissão Microsoft.Compute/locations/runCommands/read no Nível de Assinatura. A função Leitor interna e os níveis superiores têm essa permissão.

A execução de um comando requer a permissão Microsoft.Compute/virtualMachines/runCommands/write. A função Colaborador de Máquina Virtual e os níveis superiores têm essa permissão.

Use uma das funções internas ou crie uma função personalizada para usar o recurso Executar Comando.

Solução de problemas do Linux para Ação Executar Comando

Ao solucionar problemas da ação executar comando para ambientes do Linux, confira o arquivo de log do manipulador normalmente localizado no seguinte diretório: /var/log/azure/run-command-handler/handler.log, para obter mais detalhes.

Problemas conhecidos

Os logs de comando da ação Executar Comando do Linux têm algumas diferenças notáveis, em comparação aos logs do Windows para ação Executar Comando:

  • O número de sequência é relatado com cada linha do log como 'seq=#'
  • Não haverá uma linha que contenha Awaiting completion..., pois ela estará somente na ação Executar Comando do Windows.
  • A linha Command existed with code: # também está presente apenas no Log do Windows para a ação Executar Comando.

Remoção da Ação Executar Comando

Se precisar remover a extensão do Linux da ação Executar Comando, confira as etapas abaixo para o Azure PowerShell e a CLI:

Substitua rgname e vmname pelo nome do grupo de recursos relevante e pelo nome da máquina virtual nos exemplos de remoção a seguir.

 Invoke-AzVMRunCommand -ResourceGroupName 'rgname' -VMName 'vmname' -CommandId 'RemoveRunCommandLinuxExtension'
az vm run-command invoke  --command-id RemoveRunCommandLinuxExtension --name vmname -g rgname

Observação

Ao aplicar Executar Comando novamente, a extensão será instalada automaticamente. Use o comando de remoção de extensão para solucionar problemas relacionados à extensão.

Próximas etapas

Para conhecer outras maneiras de executar scripts e comandos remotamente em sua VM, consulte Executar scripts em sua VM Linux.