Scripts uitvoeren in je Linux-VM met behulp van de actie Uitvoeropdrachten

Let op

In dit artikel wordt verwezen naar CentOS, een Linux-distributie die de status End Of Life (EOL) nadert. Houd rekening met uw gebruik en plan dienovereenkomstig. Zie de Richtlijnen voor het einde van de levensduur van CentOS voor meer informatie.

Van toepassing op: ✔️ Flexibele schaalsets voor Linux-VM's ✔️

De functie Opdracht uitvoeren maakt gebruik van de VM-agent (virtuele machine) om shellscripts uit te voeren binnen een Azure Linux-VM. U kunt deze scripts gebruiken voor algemeen machine- of toepassingsbeheer. Ze kunnen u helpen om snel problemen met vm-toegang en netwerkproblemen vast te stellen en op te lossen en de VIRTUELE machine weer in een goede staat te krijgen.

Vergoedingen

U hebt op meerdere manieren toegang tot uw virtuele machines. Voer opdracht uit om scripts op uw virtuele machines op afstand uit te voeren met behulp van de VM-agent. U gebruikt De opdracht Uitvoeren via Azure Portal, REST API of Azure CLI voor Linux-VM's.

Deze mogelijkheid is handig in alle scenario's waarin u een script wilt uitvoeren binnen een virtuele machine. Het is een van de enige manieren om problemen op te lossen met een virtuele machine waarop de RDP- of SSH-poort niet is geopend vanwege de configuratie van netwerk- of beheerdersgebruikers.

Vereisten

Ondersteunde Linux-distributies

Linux-distributie x64 ARM64
Alma Linux 9.x+ 9.x+
CentOS 7.x+, 8.x+ 7.x+
Debian 10+ 11.x+
Flatcar Linux 3374.2.x+ 3374.2.x+
Azure Linux 2.x 2.x
openSUSE 12.3+ Niet ondersteund
Oracle Linux 6.4+, 7.x+, 8.x+ Niet ondersteund
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+

Beperkingen

De volgende beperkingen zijn van toepassing wanneer u de Uitvoeropdracht gebruikt:

  • De uitvoer is beperkt tot de laatste 4096 bytes.
  • De minimale tijd voor het uitvoeren van een script is ongeveer 20 seconden.
  • Scripts worden standaard uitgevoerd als een gebruiker met verhoogde bevoegdheid in Linux.
  • U kunt één script tegelijk uitvoeren.
  • Scripts die om informatie vragen (interactieve modus) worden niet ondersteund.
  • U kunt een actief script niet annuleren.
  • De maximale tijd voor het uitvoeren van een script is 90 minuten. Daarna treedt er een time-out op voor het script.
  • Uitgaande connectiviteit van de VM is vereist om de resultaten van het script te retourneren.

Notitie

Om correct te kunnen functioneren, vereist De opdracht Uitvoeren vereist connectiviteit (poort 443) naar openbare IP-adressen van Azure. Als de extensie geen toegang heeft tot deze eindpunten, worden de scripts mogelijk uitgevoerd, maar worden de resultaten niet geretourneerd. Als u verkeer op de virtuele machine blokkeert, kunt u servicetags gebruiken om verkeer naar openbare IP-adressen van Azure toe te staan met behulp van de AzureCloud tag.

Beschikbare opdrachten

In deze tabel ziet u de lijst met opdrachten die beschikbaar zijn voor virtuele Linux-machines. U kunt de opdracht RunShellScript gebruiken om een aangepast script uit te voeren dat u wilt. Wanneer u de Azure CLI of PowerShell gebruikt om een opdracht uit te voeren, moet de waarde die u opgeeft voor de --command-id of -CommandId parameter een van de volgende vermelde waarden zijn. Wanneer u een waarde opgeeft die geen beschikbare opdracht is, wordt deze fout weergegeven:

The entity was not found in this Azure location
Naam Beschrijving
RunShellScript Voert een Linux-shellscript uit.
Ifconfig Hiermee haalt u de configuratie van alle netwerkinterfaces op.

Azure-CLI

In het volgende voorbeeld wordt de opdracht az vm run-command gebruikt om een shellscript uit te voeren op een Virtuele Linux-machine in Azure.

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

Notitie

Als u opdrachten wilt uitvoeren als een andere gebruiker, voert u in om een gebruikersaccount op te geven sudo -u .

Azure Portal

Ga naar een VIRTUELE machine in Azure Portal en selecteer De opdracht Uitvoeren in het linkermenu onder Bewerkingen. U ziet een lijst met de beschikbare opdrachten die op de VIRTUELE machine moeten worden uitgevoerd.

Lijst met opdrachten

Kies een opdracht die u wilt uitvoeren. Sommige opdrachten hebben mogelijk optionele of vereiste invoerparameters. Voor deze opdrachten worden de parameters weergegeven als tekstvelden om de invoerwaarden op te geven. Voor elke opdracht kunt u het script weergeven dat wordt uitgevoerd door het weergavescript uit te vouwen. RunShellScript verschilt van de andere opdrachten, omdat u hiermee uw eigen aangepaste script kunt opgeven.

Notitie

De ingebouwde opdrachten kunnen niet worden bewerkt.

Nadat u de opdracht hebt gekozen, selecteert u Uitvoeren om het script uit te voeren. Nadat het script is voltooid, worden de uitvoer en eventuele fouten in het uitvoervenster geretourneerd. In de volgende schermopname ziet u een voorbeeld van de uitvoer van het uitvoeren van de ifconfig-opdracht .

Uitvoer van opdrachtscript uitvoeren

Powershell

In het volgende voorbeeld wordt de cmdlet Invoke-AzVMRunCommand gebruikt om een PowerShell-script uit te voeren op een Azure-VM. De cmdlet verwacht dat het script waarnaar wordt verwezen in de -ScriptPath parameter lokaal is voor de locatie waarop de cmdlet wordt uitgevoerd.

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

Toegang tot Opdracht uitvoeren beperken

Voor het weergeven van de uitvoeringsopdrachten of het weergeven van de details van een opdracht is de Microsoft.Compute/locations/runCommands/read machtiging op abonnementsniveau vereist. De ingebouwde lezerrol en hogere niveaus hebben deze machtiging.

Voor het uitvoeren van een opdracht is de Microsoft.Compute/virtualMachines/runCommands/write machtiging vereist. De rol Inzender voor virtuele machines en hogere niveaus hebben deze machtiging.

U kunt een van de ingebouwde rollen gebruiken of een aangepaste rol maken om de opdracht Uitvoeren te gebruiken.

Problemen met opdracht Uitvoeren in Linux oplossen

Raadpleeg het handlerlogboekbestand dat zich doorgaans in de volgende map bevindt bij het oplossen van de actieuitvoeringsopdracht voor Linux-omgevingen: /var/log/azure/run-command-handler/handler.log voor meer informatie.

Bekende problemen

De opdrachtlogboeken voor de Linux-actieuitvoering hebben enkele belangrijke verschillen ten opzichte van de Windows-logboeken voor het uitvoeren van acties:

  • Het volgnummer wordt gerapporteerd met elke regel van het logboek als 'seq=#'
  • Er is geen regel die deze bevat Awaiting completion... , omdat deze alleen in de opdracht Windows wordt uitgevoerd.
  • De regel Command existed with code: # is ook alleen aanwezig in de windows-logboekregistratie van de opdracht uitvoeren.

Opdracht Actie uitvoeren verwijderen

Raadpleeg de onderstaande stappen voor Azure PowerShell en CLI als u de Linux-extensie voor het uitvoeren van de actie wilt verwijderen:

Vervang rgname en vmname door de relevante resourcegroepnaam en de naam van de virtuele machine in de volgende verwijderingsvoorbeelden.

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

Notitie

Wanneer u een opdracht uitvoeren opnieuw toepast, wordt de extensie automatisch geïnstalleerd. U kunt de opdracht voor het verwijderen van extensies gebruiken om eventuele problemen met betrekking tot de extensie op te lossen.

Volgende stappen

Zie Scripts uitvoeren op uw Linux-VM voor meer informatie over andere manieren om scripts en opdrachten op afstand uit te voeren op uw VIRTUELE machine.