Eseguire script nella macchina virtuale Linux usando l'azione Esegui comando
Si applica a: ✔️ macchine virtuali di Linux ✔️ set di scalabilità flessibili
La funzionalità Esegui comando usa l'agente di macchine virtuali per eseguire gli script della shell all'interno di una macchina virtuale Linux di Azure. Questi script possono essere usati per la gestione generale del computer o delle applicazioni. Consentono di diagnosticare e risolvere rapidamente i problemi di accesso e di rete della macchina virtuale e di riportarla a uno stato valido.
È possibile accedere alle macchine virtuali in diversi modi. La funzionalità Esegui comando può eseguire script nelle macchine virtuali in modalità remota, tramite l'agente per la macchina virtuale. Può essere usato tramite il portale di Azure, l'API REST o l'interfaccia della riga di comando di Azure per le macchine virtuali Linux.
Questa funzionalità è utile in tutti gli scenari in cui si vuole eseguire uno script all'interno di una macchina virtuale. È uno degli unici modi per risolvere i problemi e correggere una macchina virtuale che non ha la porta RDP o SSH aperta a causa della configurazione utente di rete o amministrativa.
Linux Distro | x64 | ARM64 |
---|---|---|
Alma Linux | 9.x+ | 9.x+ |
Debian | 10+ | 11.x+ |
Flatcar Linux | 3374.2.x+ | 3374.2.x+ |
Azure Linux | 2.x | 2.x |
openSUSE | 12.3+ | Non supportato |
Oracle Linux | 6.4+, 7.x+, 8.x+ | Non supportato |
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+ |
Quando si usa Esegui comando, sono valide le limitazioni seguenti:
- L'output è limitato agli ultimi 4096 byte.
- Il tempo minimo per eseguire uno script è di circa 20 secondi.
- Gli script vengono eseguiti per impostazione predefinita come utente con privilegi elevati in Linux.
- È possibile eseguire uno script alla volta.
- Gli script che richiedono informazioni (modalità interattiva) non sono supportati.
- Non è possibile annullare l'esecuzione di uno script.
- Il tempo massimo di esecuzione di uno script è di 90 minuti. Successivamente, si verifica un timeout.
- La connettività in uscita dalla macchina virtuale è necessaria per restituire i risultati dello script.
Nota
Per funzionare correttamente, Esegui comando richiede la connettività agli indirizzi IP pubblici di Azure (porta 443). Se l'estensione non ha accesso a questi endpoint, gli script potrebbero funzionare correttamente, ma non restituiranno risultati. Se si sta bloccando il traffico nella macchina virtuale, è possibile usare i tag di servizio per consentire il traffico verso gli indirizzi IP pubblici di Azure tramite il tag AzureCloud
.
Questa tabella mostra l'elenco di comandi disponibili per le macchine virtuali Linux. Si può usare il comando RunShellScript per eseguire qualsiasi script personalizzato desiderato. Quando si usa l'interfaccia della riga di comando di Azure o PowerShell per eseguire un comando, il valore specificato per il parametro --command-id
o -CommandId
deve essere uno dei valori elencati di seguito. Quando si specifica un valore che non è un comando disponibile, viene visualizzato questo errore:
The entity was not found in this Azure location
Nome | Descrizione |
---|---|
RunShellScript | Esegue uno script della shell di Linux. |
ifconfig | Visualizza la configurazione di tutte le interfacce di rete. |
L'esempio seguente usa il comando az vm run-command per eseguire uno script della shell su una macchina virtuale Linux di Azure.
az vm run-command invoke -g myResourceGroup -n myVm --command-id RunShellScript --scripts "apt-get update && apt-get install -y nginx"
Nota
Per eseguire i comandi come un utente diverso, immettere sudo -u
per specificare un account utente.
Passare a una macchina virtuale nel portale di Azure e selezionare Esegui comando nel menu a sinistra, in Operazioni. Viene visualizzato un elenco dei comandi disponibili per l'esecuzione nella macchina virtuale.
Seleziona un comando da eseguire Alcuni comandi potrebbero avere parametri di input obbligatori o facoltativi. Per questi comandi, i parametri vengono presentati come campi di testo in cui immettere i valori di input. Per ogni comando è possibile vedere lo script che viene eseguito espandendo Visualizza script. RunShellScript è diverso da altri comandi, in quanto consente di fornire script personalizzati.
Nota
I comandi incorporati non sono modificabili.
Dopo aver scelto il comando, selezionare Esegui per eseguire lo script. Lo script viene eseguito e, al termine, restituisce l'output e gli eventuali errori nella finestra di output. Lo screenshot seguente illustra un esempio di output dall'esecuzione del comando ifconfig.
L'esempio seguente usa il cmdlet Invoke-AzVMRunCommand per eseguire uno script di PowerShell in una macchina virtuale di Azure. Il cmdlet si aspetta che lo script a cui fa riferimento il parametro -ScriptPath
sia presente nella posizione in cui il cmdlet viene eseguito.
Invoke-AzVMRunCommand -ResourceGroupName '<myResourceGroup>' -Name '<myVMName>' -CommandId 'RunShellScript' -ScriptPath '<pathToScript>' -Parameter @{"arg1" = "var1";"arg2" = "var2"}
Per elencare i comandi di esecuzione o visualizzare i dettagli di un comando è necessaria l'autorizzazione Microsoft.Compute/locations/runCommands/read
a livello di Sottoscrizione. Il ruolo predefinito Lettore e i livelli superiori hanno questa autorizzazione.
L'esecuzione di un comando richiede l'autorizzazione Microsoft.Compute/virtualMachines/runCommands/write
. Il ruolo Collaboratore Macchina virtuale e i livelli superiori hanno questa autorizzazione.
È possibile usare uno dei ruoli predefiniti o creare un ruolo personalizzato per usare Esegui comando.
Quando si esegue il comando di esecuzione dell'azione per gli ambienti Linux, fare riferimento al file di log del gestore che si trova in genere nella directory seguente: /var/log/azure/run-command-handler/handler.log
per altri dettagli.
I log dei comandi di esecuzione dell'azione Linux presentano alcune differenze significative rispetto al comando di esecuzione dell'azione Log di Windows:
- Il numero di sequenza viene segnalato con ogni riga del log come 'seq=#'
- Non ci sarà una riga che contiene
Awaiting completion...
perché sarà in azione eseguire solo il comando Windows. - La riga
Command existed with code: #
è presente anche solo nell'esecuzione del comando di registrazione di Windows.
Se è necessario rimuovere l'estensione Linux per l'esecuzione dell'azione, vedere i passaggi seguenti per Azure PowerShell e l'interfaccia della riga di comando:
Sostituire rgname e vmname con il nome del gruppo di risorse e il nome della macchina virtuale pertinenti negli esempi di rimozione seguenti.
Invoke-AzVMRunCommand -ResourceGroupName 'rgname' -VMName 'vmname' -CommandId 'RemoveRunCommandLinuxExtension'
az vm run-command invoke --command-id RemoveRunCommandLinuxExtension --name vmname -g rgname
Nota
Quando si applica di nuovo un comando Esegui, l'estensione verrà installata automaticamente. È possibile usare il comando di rimozione dell'estensione per risolvere eventuali problemi relativi all'estensione.
Vedere Eseguire gli script nella macchina virtuale Linux per informazioni su altri modi per eseguire comandi e script in remoto nella macchina virtuale.