Delen via


Scripts uitvoeren in je Linux-VM met behulp van beheerde Uitvoeropdrachten

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

Belangrijk

Managed Run Command is momenteel beschikbaar in Azure CLI, PowerShell en API. De portalfunctionaliteit staat op de roadmap.

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

De bijgewerkte beheerde opdracht uitvoeren maakt gebruik van hetzelfde VM-agentkanaal om scripts uit te voeren en biedt de volgende verbeteringen ten opzichte van de oorspronkelijke actiegerichte run-opdracht:

  • Ondersteuning voor de bijgewerkte Uitvoeropdracht via een ARM-implementatiesjabloon
  • Parallelle uitvoering van meerdere scripts
  • Sequentiële uitvoering van scripts
  • Door de gebruiker opgegeven time-outs voor scripts
  • Ondersteuning voor langdurige scripts (uren/dagen)
  • Geheimen (parameters, wachtwoorden) worden op een veilige manier doorgeven

Vereisten

Belangrijk

De minimaal ondersteunde Linux-gastagent is versie 2.4.0.2 Oudere versies bieden geen ondersteuning voor Beheerde RunCommand

Ondersteunde Linux-distributies

Uitgever Distributie x64 ARM64
Alma Linux Community Alma Linux 8.x+, 9.x+ 8.x+, 9.x+
Credativ Debian 10+ 11.x+
Kinvolk Flatcar Linux 3374.2.x+ 3374.2.x+
Microsoft Azure Linux 2.x 2.x
openSUSE-project openSUSE 12.3+ niet ondersteund
Oracle Oracle Linux 6.4+, 7.x+, 8.x+ niet ondersteund
Red Hat Red Hat Enterprise Linux 6.7+, 7.x+, 8.x+, 9.x+, 10.x+ 8.6+, 9.0+, 10.x+
CIQ Rocky Linux 9.x+ 9.x+
SUSE SLES 12.x+, 15.x+ 15.x SP4+
Canoniek Ubuntu (LTS-releases) 18.04+, 20.04+, 22.04+, 24.04+ 20.04+, 22.04+, 24.04+

Beschikbare opdrachten

CommandID Beschrijving
RunShellScript Voert een Linux-shellscript uit.
ifconfig Hiermee haalt u de configuratie van alle netwerkinterfaces op. Raadpleeg Scripts uitvoeren voor het gebruik ervan

Notitie

De bovenstaande opdracht-id's zijn van toepassing op beheerde run-opdrachten voor Linux-VM's. U kunt alle commandIds weergeven met behulp van de opdracht 'Get-AzVMRunCommandDocument -Location {RegionName}'.

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/runCommand/write machtiging vereist. De Virtual Machine Contributor-rol 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.

Azure-CLI

In de volgende voorbeelden wordt az vm run-command gebruikt om een shell-script uit te voeren op een Virtuele Linux-machine in Azure.

Een script uitvoeren met de VM

Met deze opdracht wordt het script aan de virtuele machine geleverd, uitgevoerd en wordt de vastgelegde uitvoer geretourneerd.

az vm run-command create --name "myRunCommand" --vm-name "myVM" --resource-group "myRG" --script "echo Hello World!"

Een lijst weergeven van alle geïmplementeerde RunCommand-resources op een VIRTUELE machine

Met deze opdracht wordt een volledige lijst met eerder geïmplementeerde run-opdrachten geretourneerd, samen met de bijbehorende eigenschappen.

az vm run-command list --vm-name "myVM" --resource-group "myRG"

Uitvoeringsstatus en -resultaten ophalen

Met deze opdracht wordt de huidige uitvoeringsvoortgang opgehaald, inclusief de meest recente uitvoer, de begin-/eindtijd, de afsluitcode en de terminalstatus van de uitvoering.

az vm run-command show --name "myRunCommand" --vm-name "myVM" --resource-group "myRG" --expand instanceView

Notitie

De uitvoer- en foutvelden in instanceView zijn beperkt tot de laatste 4 kB. Als u toegang wilt krijgen tot de volledige uitvoer en fouten, kunt u de uitvoer- en foutgegevens doorsturen naar toevoeg-blobs voor opslag met behulp van de parameters -outputBlobUri en -errorBlobUri tijdens het uitvoeren van de opdracht Uitvoeren met Set-AzVMRunCommand of Set-AzVMssRunCommand.

RunCommand-resource verwijderen van de VM

Verwijder de RunCommand-resource die eerder op de VIRTUELE machine is geïmplementeerd. Als de uitvoering van het script nog bezig is, zal de uitvoering worden beëindigd.

az vm run-command delete --name "myRunCommand" --vm-name "myVM" --resource-group "myRG"

Powershell

Een script uitvoeren met de VM

Met deze opdracht wordt het script aan de virtuele machine geleverd, uitgevoerd en wordt de vastgelegde uitvoer geretourneerd.

Set-AzVMRunCommand -ResourceGroupName "myRG" -VMName "myVM" -Location "EastUS" -RunCommandName "RunCommandName" –SourceScript "echo Hello World!"

Een script uitvoeren op de VM met de parameter SourceScriptUri

OutputBlobUri en ErrorBlobUri zijn optionele parameters.

Set-AzVMRunCommand -ResourceGroupName -VMName -RunCommandName -SourceScriptUri “< SAS URI of a storage blob with read access or public URI>" -OutputBlobUri “< SAS URI of a storage append blob with read, add, create, write access>” -ErrorBlobUri “< SAS URI of a storage append blob with read, add, create, write access>”

Een langlopende run-opdracht uitvoeren op een VIRTUELE machine

De uitvoeringstijd moet langer duren dan de standaardtime-out van 90 minuten. De script moet 100 minuten draaien (raadpleeg de parameter van 6.000 seconden -TimeoutInSecond), mits het script naar verwachting zo lang draait. Na 100 minuten moet de uitvoering van het script worden gestopt.

Set-AzVMRunCommand -ResourceGroupName MyRG -VMName MyVM -RunCommandName MyRunCommand -Location EastUS2EUAP -SourceScriptUri <SourceScriptUri> -AsyncExecution -TimeoutInSecond 6000

Een lijst weergeven van alle geïmplementeerde RunCommand-resources op een VIRTUELE machine

Met deze opdracht wordt een volledige lijst met eerder geïmplementeerde run-opdrachten geretourneerd, samen met de bijbehorende eigenschappen.

Get-AzVMRunCommand -ResourceGroupName "myRG" -VMName "myVM"

Uitvoeringsstatus en -resultaten ophalen

Met deze opdracht wordt de huidige uitvoeringsvoortgang opgehaald, inclusief de meest recente uitvoer, de begin-/eindtijd, de afsluitcode en de terminalstatus van de uitvoering.

Get-AzVMRunCommand -ResourceGroupName "myRG" -VMName "myVM" -RunCommandName "RunCommandName" -Expand instanceView

Opdracht uitvoeren op een virtuele machine maken of bijwerken met behulp van SourceScriptURI (SAS-URL voor opslagblob)

Opdracht Uitvoeren op een Windows-VM maken of bijwerken met behulp van een SAS-URL van een opslagblob die een PowerShell-script bevat. SourceScriptUri kan de volledige SAS-URL of openbare URL van een opslagblob zijn.

Notitie

De SAS-URL moet leestoegang bieden tot de blob. Er wordt een verlooptijd van 24 uur voorgesteld voor de SAS-URL. SAS-URL's kunnen worden gegenereerd in Azure Portal met behulp van de opties van blob of sas-token met behulp van New-AzStorageBlobSASToken. Als u een SAS-token genereert met behulp van New-AzStorageBlobSASToken, is uw SAS-URL = "basis-blob-URL" + "?" + "SAS-token van New-AzStorageBlobSASToken"

Set-AzVMRunCommand -ResourceGroupName MyRG0 -VMName MyVMEE -RunCommandName MyRunCommand -Location EastUS2EUAP -SourceScriptUri <SourceScriptURI>

Een Run Command-instantieweergave voor een virtuele machine ophalen na het aanmaken of bijwerken van een Run Command

Krijg een uitvoeropdracht voor VM met een exemplaarweergave. De exemplaarweergave bevat de uitvoeringsstatus van opdracht uitvoeren (geslaagd, mislukt, enzovoort), afsluitcode, standaarduitvoer en standaardfout die wordt gegenereerd door het script uit te voeren met behulp van de opdracht Uitvoeren. Een niet-zero ExitCode geeft een mislukte uitvoering aan.

$x = Get-AzVMRunCommand -ResourceGroupName MyRG -VMName MyVM -RunCommandName MyRunCommand -Expand InstanceView
$x.InstanceView

Verwachte uitvoer:

ExecutionState   : Succeeded
ExecutionMessage :
ExitCode         : 0
Output           :   
output       : uid=0(root) gid=0(root) groups=0(root)
                   HelloWorld

Error            :
StartTime        : 10/27/2022 9:10:52 PM
EndTime          : 10/27/2022 9:10:55 PM
Statuses         :

InstanceView.ExecutionState -Status van het script Run Command van de gebruiker. Raadpleeg deze status om te weten of uw script al dan niet is geslaagd.

ProvisioningState - Status van het inrichten van algemene extensies end-to-end (of het extensieplatform het uitvoeren van een opdrachtscript kon activeren of niet).

Run-opdracht op een virtuele machine maken of bijwerken met SourceScript (scripttekst)

Maak of werk de Run Command bij op een VM die de scriptinhoud rechtstreeks doorgeeft aan de parameter -SourceScript. Gebruik ; om meerdere opdrachten te scheiden.

Set-AzVMRunCommand -ResourceGroupName MyRG0 -VMName MyVML -RunCommandName MyRunCommand2 -Location EastUS2EUAP -SourceScript "id; echo HelloWorld"

Een uitvoeropdracht op een virtuele machine maken of bijwerken met behulp van SourceCommandId.

Maak of werk de opdracht Uitvoeren op een VIRTUELE machine bij met behulp van bestaande commandIduitvoering. Beschikbare commandIds kunnen worden opgehaald met Get-AzVMRunCommandDocument.

Set-AzVMRunCommand -ResourceGroupName MyRG0 -VMName MyVMEE -RunCommandName MyRunCommand -Location EastUS2EUAP -SourceCommandId ipconfig

Een uitvoeringsopdracht op een virtuele machine maken of bijwerken met behulp van OutputBlobUri en ErrorBlobUri om de standaarduitvoer en de standaardfoutberichten naar uitvoer en fout toegevoegde blobs te streamen.

Run Command maken of bijwerken op een virtuele machine en standaarduitvoer en standaardfoutberichten doorsturen naar uitvoer- en fouttoevoeg-blobs.

Set-AzVMRunCommand -ResourceGroupName MyRG0 -VMName MyVML -RunCommandName MyRunCommand3 -Location EastUS2EUAP EastUS2EUAP -SourceScriptUri <SourceScriptUri> -OutputBlobUri <OutputBlobUri> -ErrorBlobUri <errorbloburi>

Notitie

Uitvoer- en fout-blobs moeten van het type AppendBlob zijn en hun SAS-URL's moeten lees-, toevoeg-, create-, schrijftoegang tot de blob bieden. Er wordt een verlooptijd van 24 uur voorgesteld voor de SAS-URL. Als de uitvoer- of foutblob niet bestaat, wordt er een blob van het type AppendBlob gemaakt. SAS-URL's kunnen worden gegenereerd in Azure Portal met behulp van de opties van blob of SAS-token met new-AzStorageBlobSASToken. Als u een SAS-token genereert met behulp van New-AzStorageBlobSASToken, SAS-URL = basis-blob-URL + "?" + SAS-token van New-AzStorageBlobSASToken.

Opdracht Uitvoeren op een VIRTUELE machine maken of bijwerken, voer de opdracht Uitvoeren uit als een andere gebruiker met de parameters RunAsUser en RunAsPassword

Maak of werk de opdracht uitvoeren op een virtuele machine bij, en voer de opdracht uit als een andere gebruiker met behulp van RunAsUser en RunAsPassword parameters. Neem contact op met de beheerder van de VM en zorg ervoor dat de gebruiker op de VM wordt toegevoegd, heeft de gebruiker toegang tot resources die worden geopend met de opdracht Uitvoeren (mappen, bestanden, netwerk, enzovoort) en in het geval van windows-VM wordt de secundaire aanmeldingsservice uitgevoerd op de VIRTUELE machine.

Set-AzVMRunCommand -ResourceGroupName MyRG0 -VMName MyVMEE -RunCommandName MyRunCommand -Location EastUS2EUAP EastUS2EUAP -SourceScriptUri <SourceScriptUri> -RunAsUser myusername -RunAsPassword mypassword

Run-opdracht maken of bijwerken voor een resource van virtuele-machinesschaalsets met behulp van SourceScriptUri (SAS-URL voor opslagblob).

Maak of werk het commando Uitvoeren bij op een virtuele machineschaalset resource door gebruik te maken van een SAS-URL van een opslagblob die een bash-script bevat.

Set-AzVmssVMRunCommand -ResourceGroupName MyRG0 -VMScaleSetName MyVMSS -InstanceId 0 -RunCommandName MyRunCommand -Location EastUS2EUAP -SourceScriptUri <SourceScriptUri>

Notitie

Opmerking SAS-URL moet leestoegang bieden tot de blob. Er wordt een verlooptijd van 24 uur voorgesteld voor de SAS-URL. SAS-URL's kunnen worden gegenereerd in Azure Portal met behulp van de opties van blob of SAS-token met new-AzStorageBlobSASToken. Als u een SAS-token genereert met new-AzStorageBlobSASToken, sas-URL = basis-blob-URL + "?" + SAS-token van New-AzStorageBlobSASToken.

Run Command maken of bijwerken op een VM-exemplaar met Parameter- en ProtectedParameter-parameters (openbare en beveiligde parameters voor het script)

$PublicParametersArray = @([Microsoft.Azure.PowerShell.Cmdlets.Compute.Models.Api20210701.IRunCommandInputParameter]@{name='publicParam1';value='publicParam1value'},
>> [Microsoft.Azure.PowerShell.Cmdlets.Compute.Models.Api20210701.IRunCommandInputParameter]@{name='publicParam2';value='publicParam2value'})

$ProtectedParametersArray = @([Microsoft.Azure.PowerShell.Cmdlets.Compute.Models.Api20210701.IRunCommandInputParameter]@{name='secret1';value='secret1value'},
>> [Microsoft.Azure.PowerShell.Cmdlets.Compute.Models.Api20210701.IRunCommandInputParameter]@{name='secret2';value='secret2value'})

Set-AzVMRunCommand -ResourceGroupName MyRG0 -VMName MyVMEE -RunCommandName MyRunCommand -Location EastUS2EUAP -SourceScriptUri <SourceScriptUri> -Parameter $PublicParametersArray -ProtectedParameter $ProtectedParametersArray

Gebruik ProtectedParameter deze functie om gevoelige invoer door te geven aan scripts, zoals wachtwoorden, sleutels, enzovoort.

  • Windows: Parameters en ProtectedParameters worden doorgegeven aan het script omdat argumenten worden doorgegeven aan het script en als volgt worden uitgevoerd myscript.ps1 -publicParam1 publicParam1value -publicParam2 publicParam2value -secret1 secret1value -secret2 secret2value
  • Linux: Benoemde parameters en de bijbehorende waarden zijn ingesteld op omgevingsconfiguratie, die toegankelijk moet zijn binnen het .sh script. Geef voor argumenten zonder naam een lege tekenreeks door om invoer een naam te geven. Naamloze argumenten worden doorgegeven aan scripts en worden als volgt uitgevoerd - myscript.sh publicParam1value publicParam2value secret1value secret2value

RunCommand-resource verwijderen van de VM

Verwijder de RunCommand-resource die eerder op de VIRTUELE machine is geïmplementeerd. Als het script nog steeds wordt uitgevoerd, wordt de uitvoering beëindigd.

Remove-AzVMRunCommand -ResourceGroupName "myRG" -VMName "myVM" -RunCommandName "RunCommandName"

REST-API

Als u een nieuwe Run Command wilt implementeren, voert u direct een PUT-methode uit op de virtuele machine en specificeert u een unieke naam voor de Run Command instantie.

PUT /subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/providers/Microsoft.Compute/virtualMachines/<vmName>/runcommands?api-version=2019-12-01
{ 
"location": "<location>", 
"properties": { 
    "source": { 
        "script": "Write-Host Hello World!", 
        "scriptUri": "<SAS URI of a storage blob with read access or public URI>",  
        "commandId": "<Id>"  
        }, 
    "parameters": [ 
        { 
            "name": "param1",
            "value": "value1" 
            }, 
        { 
            "name": "param2", 
            "value": "value2" 
            } 
        ], 
    "protectedParameters": [ 
        { 
            "name": "secret1", 
            "value": "value1" 
            }, 
        { 
            "name": "secret2", 
            "value": "value2" 
            } 
        ], 
    "runAsUser": "userName",
    "runAsPassword": "userPassword", 
    "timeoutInSeconds": 3600, 
    "outputBlobUri": "< SAS URI of a storage append blob with read, add, create, write access>", 
    "errorBlobUri": "< SAS URI of a storage append blob with read, add, create, write access >"  
    }
}

Opmerkingen

  • U kunt een inlinescript, een script-URI of een ingebouwde scriptopdracht-id opgeven als invoerbron. Script-URI is een SAS-URI voor opslagblob met leestoegang of een openbare URI.
  • Er wordt slechts één type broninvoer ondersteund voor één opdrachtuitvoering.
  • Run Command ondersteunt het schrijven van uitvoer en fouten naar Opslag-blobs met behulp van de parameters outputBlobUri en errorBlobUri, die kunnen worden gebruikt voor het opslaan van grote scriptuitvoer. Gebruik de SAS-URI van een opslag-toevoeg-blob met lees-, toevoeg-, creëer- en schrijf-toegang. De blob moet van het type AppendBlob zijn. Het schrijven van de scriptuitvoer of foutblob zou anders mislukken. De blob wordt overschreven als deze al aanwezig is. Deze wordt gemaakt als deze niet bestaat.

Lopende instanties van de opdracht uitvoeren op een virtuele machine weergeven

GET /subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/providers/Microsoft.Compute/virtualMachines/<vmName>/runcommands?api-version=2019-12-01

Uitvoerresultaten ophalen voor een specifieke Run Command-implementatie

GET /subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/providers/Microsoft.Compute/virtualMachines/<vmName>/runcommands/<runCommandName>?$expand=instanceView&api-version=2019-12-01 

Een specifieke implementatie van een Run Command verwijderen

De instantie van het uitvoeringscommando verwijderen

DELETE /subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/providers/Microsoft.Compute/virtualMachines/<vmName>/runcommands/<runCommandName>?api-version=2019-12-01 

Scripts implementeren in een geordende volgorde

Als u scripts opeenvolgend wilt implementeren, gebruikt u een implementatiesjabloon en geeft u een dependsOn relatie op tussen sequentiële scripts.

{ 
    "type":"Microsoft.Compute/virtualMachines/runCommands",
    "name":"secondRunCommand",
    "apiVersion":"2019-12-01",
    "location":"[parameters('location')]",
    "dependsOn":<full resourceID of the previous other Run Command>,
    "properties":{
        "source":{
            "script":"echo Hello World!" 
        },
        "timeoutInSeconds":60
    }
}

Meerdere run-opdrachten sequentieel uitvoeren

Als u standaard meerdere RunCommand-resources implementeert met behulp van een implementatiesjabloon, worden deze gelijktijdig uitgevoerd op de virtuele machine. Als u afhankelijk bent van de scripts en een voorkeursvolgorde van uitvoering, kunt u de dependsOn eigenschap gebruiken om ze opeenvolgend uit te voeren.

In dit voorbeeld wordt secondRunCommand uitgevoerd na firstRunCommand.

{
   "$schema":"https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
   "contentVersion":"1.0.0.0",
   "resources":[
      {
         "type":"Microsoft.Compute/virtualMachines/runCommands",
         "name":"[concat(parameters('vmName'),'/firstRunCommand')]",
         "apiVersion":"2019-12-01",
         "location":"[parameters('location')]",
         "dependsOn":[
            "[concat('Microsoft.Compute/virtualMachines/', parameters('vmName'))]"
         ],
         "properties":{
            "source":{
               "script":"echo First: Hello World!"
            },
            "parameters":[
               {
                  "name":"param1",
                  "value":"value1"
               },
               {
                  "name":"param2",
                  "value":"value2"
               }
            ],
            "timeoutInSeconds":20
         }
      },
      {
         "type":"Microsoft.Compute/virtualMachines/runCommands",
         "name":"[concat(parameters('vmName'),'/secondRunCommand')]",
         "apiVersion":"2019-12-01",
         "location":"[parameters('location')]",
         "dependsOn":[
            "[concat('Microsoft.Compute/virtualMachines/', parameters('vmName'),'runcommands/firstRunCommand')]"
         ],
         "properties":{
            "source":{
               "scriptUri":"http://github.com/myscript.ps1"
            },
            "timeoutInSeconds":60
         }
      }
   ]
}

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.