Använda version 2 av Azures tillägg för anpassat skript med virtuella Linux-datorerUse the Azure Custom Script Extension Version 2 with Linux virtual machines

Det anpassade skript tillägget version 2 laddar ned och kör skript på virtuella Azure-datorer.The Custom Script Extension Version 2 downloads and runs scripts on Azure virtual machines. Det här tillägget är användbart för konfiguration efter distribution, program varu installation eller andra konfigurations-och hanterings åtgärder.This extension is useful for post-deployment configuration, software installation, or any other configuration/management task. Du kan hämta skript från Azure Storage eller en annan tillgänglig Internet plats, eller så kan du ange dem till tilläggets körnings miljö.You can download scripts from Azure Storage or another accessible internet location, or you can provide them to the extension runtime.

Det anpassade skript tillägget integreras med Azure Resource Manager mallar.The Custom Script Extension integrates with Azure Resource Manager templates. Du kan också köra det med hjälp av Azure CLI, PowerShell eller Azure Virtual Machines REST API.You can also run it by using Azure CLI, PowerShell, or the Azure Virtual Machines REST API.

Den här artikeln beskriver hur du använder tillägget för anpassat skript från Azure CLI och hur du kör tillägget med hjälp av en Azure Resource Manager mall.This article details how to use the Custom Script Extension from Azure CLI, and how to run the extension by using an Azure Resource Manager template. Den här artikeln innehåller också fel söknings steg för Linux-system.This article also provides troubleshooting steps for Linux systems.

Det finns två anpassade skript tillägg för Linux:There are two Linux Custom Script Extensions:

  • Version 1-Microsoft. OSTCExtensions. CustomScriptForLinuxVersion 1 - Microsoft.OSTCExtensions.CustomScriptForLinux
  • Version 2-Microsoft. Azure. Extensions. CustomScriptVersion 2 - Microsoft.Azure.Extensions.CustomScript

Växla mellan nya och befintliga distributioner för att använda den nya version 2 i stället.Please switch new and existing deployments to use the new version 2 instead. Den nya versionen är avsedd att vara en lättillgänglig ersättning.The new version is intended to be a drop-in replacement. Därför är migreringen lika enkel som att ändra namn och version. Du behöver inte ändra tilläggskonfigurationen.Therefore, the migration is as easy as changing the name and version, you do not need to change your extension configuration.

OperativsystemOperating System

Det anpassade skript tillägget för Linux kommer att köras på tillägget tillägg som stöds, mer information finns i den här artikeln.The Custom Script Extension for Linux will run on the extension supported extension OS's, for more information, see this article.

Skript platsScript Location

Du kan använda tillägget för att använda dina Azure Blob Storage-autentiseringsuppgifter för att få åtkomst till Azure Blob Storage.You can use the extension to use your Azure Blob storage credentials, to access Azure Blob storage. Alternativt kan skript platsen var som helst, så länge den virtuella datorn kan dirigeras till den slut punkten, till exempel GitHub, intern fil Server osv.Alternatively, the script location can be any where, as long as the VM can route to that end point, such as GitHub, internal file server etc.

Internet anslutningInternet Connectivity

Om du behöver hämta ett skript externt, till exempel GitHub eller Azure Storage, måste du öppna ytterligare brand Väggs-och nätverks säkerhets grupps portar.If you need to download a script externally such as GitHub or Azure Storage, then additional firewall/Network Security Group ports need to be opened. Om ditt skript till exempel finns i Azure Storage kan du tillåta åtkomst med hjälp av Azure NSG service-taggar för lagring.For example if your script is located in Azure Storage, you can allow access using Azure NSG Service Tags for Storage.

Om ditt skript finns på en lokal server kanske du fortfarande behöver fler brand Väggs-och nätverks säkerhets grupps portar som måste öppnas.If your script is on a local server, then you may still need additional firewall/Network Security Group ports need to be opened.

TipsTips and Tricks

  • Den högsta felfrekvensen för det här tillägget beror på syntaxfel i skriptet. Kontrollera att skriptet körs utan fel, och implementera ytterligare loggning i skriptet så att det blir enklare att identifiera var felet inträffade.The highest failure rate for this extension is due to syntax errors in the script, test the script runs without error, and also put in additional logging into the script to make it easier to find where it failed.
  • Skriv skript som är idempotenta, så att inga systemändringar görs om de oavsiktligt körs mer än en gång.Write scripts that are idempotent, so if they get run again more than once accidentally, it will not cause system changes.
  • Kontrol lera att skripten inte kräver användarindata när de körs.Ensure the scripts do not require user input when they run.
  • Det finns 90 minuter som tillåts för att skriptet ska kunna köras. allt längre leder till en misslyckad etablering av tillägget.There is 90 mins allowed for the script to run, anything longer will result in a failed provision of the extension.
  • Starta inte om omstarter inuti skriptet. Detta leder till problem med andra tillägg som installeras och efter omstarten kommer tillägget inte att fortsätta efter omstarten.Do not put reboots inside the script, this will cause issues with other extensions that are being installed, and post reboot, the extension will not continue after the restart.
  • Vi rekommenderar inte att du kör ett skript som gör att VM-agenten stoppas eller uppdateras.It is not recommended to run a script that will cause a stop or update of the VM Agent. Detta kan lämna tillägget i ett över gångs tillstånd och leda till en tids gräns.This might leave the extension in a Transitioning state and lead to a timeout.
  • Om du har ett skript som gör en omstart installerar du program och kör skript osv. Du bör schemalägga en omstart med hjälp av ett cron-jobb eller använda verktyg som DSC eller chef, Puppet-tillägg.If you have a script that will cause a reboot, then install applications and run scripts etc. You should schedule the reboot using a Cron job, or using tools such as DSC, or Chef, Puppet extensions.
  • Tillägget kör bara ett skript en gång, om du vill köra ett skript vid varje start, kan du använda Cloud-Init-avbildning och använda skript per startmodul.The extension will only run a script once, if you want to run a script on every boot, then you can use cloud-init image and use a Scripts Per Boot module. Du kan också använda skriptet för att skapa en system tjänst enhet.Alternatively, you can use the script to create a SystemD service unit.
  • Du kan bara ha en version av ett tillägg som tillämpas på den virtuella datorn.You can only have one version of an extension applied to the VM. För att kunna köra ett andra anpassat skript kan du uppdatera det befintliga tillägget med ny konfiguration.In order to run a second custom script, you can update the existing extension with new configuration. Du kan också ta bort det anpassade skript tillägget och tillämpa det igen med det uppdaterade skriptet.Alternatively, you can remove the custom script extension and reapply it again with the updated script.
  • Om du vill schemalägga när ett skript ska köras ska du använda tillägget för att skapa ett cron-jobb.If you want to schedule when a script will run, you should use the extension to create a Cron job.
  • När skriptet körs visas tillägget med övergångsstatus på Azure-portalen eller i CLI.When the script is running, you will only see a 'transitioning' extension status from the Azure portal or CLI. Om du vill ha mer frekventa status uppdateringar för ett skript som körs måste du skapa en egen lösning.If you want more frequent status updates of a running script, you will need to create your own solution.
  • Anpassat skript tillägg stöder inte proxyservrar, men du kan använda ett fil överförings verktyg som stöder proxyservrar i skriptet, till exempel vändning.Custom Script extension does not natively support proxy servers, however you can use a file transfer tool that supports proxy servers within your script, such as Curl.
  • Var medveten om icke-standardkataloger som skripten eller kommandona kan vara beroende av, har logik för att hantera detta.Be aware of non default directory locations that your scripts or commands may rely on, have logic to handle this.
  • När du distribuerar anpassat skript till produktion VMSS-instanser rekommenderar vi att du distribuerar via JSON-mallen och lagrar ditt skript lagrings konto där du har kontroll över SAS-token.When deploying custom script to production VMSS instances it is suggested to deploy via json template and store your script storage account where you have control over the SAS token.

TilläggsschemaExtension schema

Konfigurationen för det anpassade skript tillägget anger saker som skript plats och kommandot som ska köras.The Custom Script Extension configuration specifies things like script location and the command to be run. Du kan lagra konfigurationen i konfigurationsfiler, ange den på kommando raden eller ange den i en Azure Resource Manager mall.You can store this configuration in configuration files, specify it on the command line, or specify it in an Azure Resource Manager template.

Du kan lagra känsliga data i en skyddad konfiguration, som krypteras och bara dekrypteras i den virtuella datorn.You can store sensitive data in a protected configuration, which is encrypted and only decrypted inside the virtual machine. Den skyddade konfigurationen är användbar när körnings kommandot innehåller hemligheter som lösen ord.The protected configuration is useful when the execution command includes secrets such as a password.

De här objekten ska behandlas som känsliga data och anges i konfigurationerna för tilläggen för skyddad inställning.These items should be treated as sensitive data and specified in the extensions protected setting configuration. Skyddade inställnings data för Azure VM-tillägg krypteras och endast dekrypteras på den virtuella mål datorn.Azure VM extension protected setting data is encrypted, and only decrypted on the target virtual machine.

{
  "name": "config-app",
  "type": "Extensions",
  "location": "[resourceGroup().location]",
  "apiVersion": "2019-03-01",
  "dependsOn": [
    "[concat('Microsoft.Compute/virtualMachines/', concat(variables('vmName'),copyindex()))]"
  ],
  "tags": {
    "displayName": "config-app"
  },
  "properties": {
    "publisher": "Microsoft.Azure.Extensions",
    "type": "CustomScript",
    "typeHandlerVersion": "2.1",
    "autoUpgradeMinorVersion": true,
    "settings": {
      "skipDos2Unix":false,
      "timestamp":123456789          
    },
    "protectedSettings": {
       "commandToExecute": "<command-to-execute>",
       "script": "<base64-script-to-execute>",
       "storageAccountName": "<storage-account-name>",
       "storageAccountKey": "<storage-account-key>",
       "fileUris": ["https://.."],
       "managedIdentity" : "<managed-identity-identifier>"
    }
  }
}

Anteckning

Egenskapen managedIdentity får inte användas tillsammans med storageAccountName-eller storageAccountKey-egenskapermanagedIdentity property must not be used in conjunction with storageAccountName or storageAccountKey properties

Egenskaps värdenProperty values

NameName Värde/exempelValue / Example DatatypData Type
apiVersionapiVersion 2019-03-012019-03-01 datedate
utgivarepublisher Microsoft. Compute. ExtensionsMicrosoft.Compute.Extensions strängstring
typtype CustomScriptCustomScript strängstring
typeHandlerVersiontypeHandlerVersion 2.12.1 intint
fileUris (t. ex.)fileUris (e.g) https://github.com/MyProject/Archive/MyPythonScript.py matrisarray
commandToExecute (t. ex.)commandToExecute (e.g) python-MyPythonScript.py <my-param1>python MyPythonScript.py <my-param1> strängstring
skriptscript IyEvYmluL3NoCmVjaG8gIlVwZGF0aW5nIHBhY2thZ2VzIC4uLiIKYXB0IHVwZGF0ZQphcHQgdXBncmFkZSAteQo =IyEvYmluL3NoCmVjaG8gIlVwZGF0aW5nIHBhY2thZ2VzIC4uLiIKYXB0IHVwZGF0ZQphcHQgdXBncmFkZSAteQo= strängstring
skipDos2Unix (t. ex.)skipDos2Unix (e.g) falsktfalse booleanboolean
tidsstämpel (t. ex.)timestamp (e.g) 123456789123456789 32-bitars heltal32-bit integer
storageAccountName (t. ex.)storageAccountName (e.g) examplestorageacctexamplestorageacct strängstring
storageAccountKey (t. ex.)storageAccountKey (e.g) TmJK/1N3AbAZ3q/+ hOXoi/l73zOqsaxXDhqa9Y83/v5UpXQp2DQIBuv2Tifp60cE/OaHsJZmQZ7teQfczQj8hg = =TmJK/1N3AbAZ3q/+hOXoi/l73zOqsaxXDhqa9Y83/v5UpXQp2DQIBuv2Tifp60cE/OaHsJZmQZ7teQfczQj8hg== strängstring
managedIdentity (t. ex.)managedIdentity (e.g) {} eller {"clientId": "31b403aa-c364-4240-a7ff-d85fb6cd7232"} eller {"objectId": "12dd289c-0583-46e5-b9b4-115d5c19ef4b"}{ } or { "clientId": "31b403aa-c364-4240-a7ff-d85fb6cd7232" } or { "objectId": "12dd289c-0583-46e5-b9b4-115d5c19ef4b" } JSON-objektjson object

Information om egenskaps värdeProperty value details

  • apiVersion: Den mest aktuella API version kan hittas med Resursläsaren eller från Azure CLI med hjälp av följande kommando az provider list -o jsonapiVersion: The most up to date apiVersion can be found using Resource Explorer or from Azure CLI using the following command az provider list -o json
  • skipDos2Unix: (valfritt, boolesk) hoppa över dos2unix-konvertering av skriptbaserade fil-URL: er eller skript.skipDos2Unix: (optional, boolean) skip dos2unix conversion of script-based file URLs or script.
  • timestamp (valfritt, 32-bitars heltal) Använd bara det här fältet för att utlösa en ny körning av skriptet genom att ändra värdet för det här fältet.timestamp (optional, 32-bit integer) use this field only to trigger a re-run of the script by changing value of this field. Alla heltals värden är acceptabla. Det får bara vara ett annat än det tidigare värdet.Any integer value is acceptable; it must only be different than the previous value.
  • commandToExecute: (krävs om skript inte har angetts, sträng) Start punkt skriptet som ska köras.commandToExecute: (required if script not set, string) the entry point script to execute. Använd det här fältet i stället om kommandot innehåller hemligheter som lösen ord.Use this field instead if your command contains secrets such as passwords.
  • script: (krävs om commandToExecute inte har angetts, sträng) ett base64-kodat (och eventuellt gzip'ed) skript som körs av/bin/sh.script: (required if commandToExecute not set, string)a base64 encoded (and optionally gzip'ed) script executed by /bin/sh.
  • fileUris: (valfritt, sträng mat ris) URL: er för fil (er) som ska hämtas.fileUris: (optional, string array) the URLs for file(s) to be downloaded.
  • storageAccountName: (valfritt, sträng) namnet på lagrings kontot.storageAccountName: (optional, string) the name of storage account. Om du anger autentiseringsuppgifter fileUris för lagring måste alla vara URL: er för Azure-blobar.If you specify storage credentials, all fileUris must be URLs for Azure Blobs.
  • storageAccountKey: (valfritt, sträng) åtkomst nyckeln för lagrings kontotstorageAccountKey: (optional, string) the access key of storage account
  • managedIdentity: (valfritt, JSON-objekt) den hanterade identiteten för nedladdning av fil (er)managedIdentity: (optional, json object) the managed identity for downloading file(s)
    • clientId: (valfritt, sträng) klient-ID: t för den hanterade identitetenclientId: (optional, string) the client ID of the managed identity
    • objectId: (valfritt, sträng) objekt-ID för den hanterade identitetenobjectId: (optional, string) the object ID of the managed identity

Följande värden kan anges i offentliga eller skyddade inställningar. tillägget kommer att neka alla konfigurationer där värdena nedan anges i både offentliga och skyddade inställningar.The following values can be set in either public or protected settings, the extension will reject any configuration where the values below are set in both public and protected settings.

  • commandToExecute
  • script
  • fileUris

Användning av offentliga inställningar kan vara användbart för fel sökning, men vi rekommenderar starkt att du använder skyddade inställningar.Using public settings maybe useful for debugging, but it is strongly recommended that you use protected settings.

Offentliga inställningar skickas i klartext till den virtuella dator där skriptet ska köras.Public settings are sent in clear text to the VM where the script will be executed. Skyddade inställningar krypteras med en nyckel som endast är känd för Azure och den virtuella datorn.Protected settings are encrypted using a key known only to the Azure and the VM. Inställningarna sparas på den virtuella datorn när de skickades, dvs. om inställningarna krypterades sparas de som krypterade på den virtuella datorn.The settings are saved to the VM as they were sent, i.e. if the settings were encrypted they are saved encrypted on the VM. Certifikatet som används för att dekryptera de krypterade värdena lagras på den virtuella datorn och används för att dekryptera inställningar (vid behov) vid körning.The certificate used to decrypt the encrypted values is stored on the VM, and used to decrypt settings (if necessary) at runtime.

Egenskap: skipDos2UnixProperty: skipDos2Unix

Standardvärdet är false, vilket innebär att dos2unix -konverteringen körs.The default value is false, which means dos2unix conversion is executed.

Den tidigare versionen av CustomScript, Microsoft. OSTCExtensions. CustomScriptForLinux, konverterar automatiskt DOS-filer till UNIX-filer genom \r\n att översätta till \n .The previous version of CustomScript, Microsoft.OSTCExtensions.CustomScriptForLinux, would automatically convert DOS files to UNIX files by translating \r\n to \n. Den här översättningen finns fortfarande och är på som standard.This translation still exists, and is on by default. Den här konverteringen tillämpas på alla filer som laddats ned från fileUris eller skript inställningen baserat på något av följande kriterier.This conversion is applied to all files downloaded from fileUris or the script setting based on any of the following criteria.

  • Om tillägget är en av, .sh , .txt .py eller .pl kommer att konverteras.If the extension is one of .sh, .txt, .py, or .pl it will be converted. Skript inställningen matchar alltid det här kriteriet eftersom det antas vara ett skript som körs med/bin/sh och som sparas som script.sh på den virtuella datorn.The script setting will always match this criteria because it is assumed to be a script executed with /bin/sh, and is saved as script.sh on the VM.
  • Om filen börjar med #! .If the file starts with #!.

Dos2unix-omvandlingen kan hoppas över genom att ange skipDos2Unix till true.The dos2unix conversion can be skipped by setting the skipDos2Unix to true.

{
  "fileUris": ["<url>"],
  "commandToExecute": "<command-to-execute>",
  "skipDos2Unix": true
}

Egenskap: skriptProperty: script

CustomScript stöder körning av ett användardefinierat skript.CustomScript supports execution of a user-defined script. Skript inställningarna för att kombinera commandToExecute och fileUris i en enda inställning.The script settings to combine commandToExecute and fileUris into a single setting. I stället för att behöva konfigurera en fil för nedladdning från Azure Storage eller GitHub, kan du bara koda skriptet som en inställning.Instead of the having to setup a file for download from Azure storage or GitHub gist, you can simply encode the script as a setting. Skriptet kan användas för att ersätta commandToExecute och fileUris.Script can be used to replaced commandToExecute and fileUris.

Skriptet måste vara Base64-kodat.The script must be base64 encoded. Skriptet kan också vara gzip'ed.The script can optionally be gzip'ed. Skript inställningen kan användas i offentliga eller skyddade inställningar.The script setting can be used in public or protected settings. Den maximala storleken för skript parameterns data är 256 KB.The maximum size of the script parameter's data is 256 KB. Om skriptet överskrider den här storleken kommer det inte att köras.If the script exceeds this size it will not be executed.

Till exempel kan följande skript sparas i filen/script.sh/.For example, given the following script saved to the file /script.sh/.

#!/bin/sh
echo "Updating packages ..."
apt update
apt upgrade -y

Rätt CustomScript-skript inställning skulle konstrueras genom att ta utdata från följande kommando.The correct CustomScript script setting would be constructed by taking the output of the following command.

cat script.sh | base64 -w0
{
  "script": "IyEvYmluL3NoCmVjaG8gIlVwZGF0aW5nIHBhY2thZ2VzIC4uLiIKYXB0IHVwZGF0ZQphcHQgdXBncmFkZSAteQo="
}

Skriptet kan också vara gzip'ed för att ytterligare minska storleken (i de flesta fall). (CustomScript automatiskt identifierar användningen av gzip-komprimering.)(CustomScript auto-detects the use of gzip compression.)

cat script | gzip -9 | base64 -w 0

CustomScript använder följande algoritm för att köra ett skript.CustomScript uses the following algorithm to execute a script.

  1. kontroll av att längden på skriptets värde inte överskrider 256 KB.assert the length of the script's value does not exceed 256 KB.
  2. Base64 avkoda skriptets värdebase64 decode the script's value
  3. försök att gunzip det Base64-avkodade värdetattempt to gunzip the base64 decoded value
  4. Skriv avkodat (och eventuellt expanderat) värde till disk (/var/lib/waagent/Custom-script/#/script.sh)write the decoded (and optionally decompressed) value to disk (/var/lib/waagent/custom-script/#/script.sh)
  5. Kör skriptet med _/bin/sh-c/var/lib/waagent/Custom-script/#/script.sh.execute the script using _/bin/sh -c /var/lib/waagent/custom-script/#/script.sh.

Egenskap: managedIdentityProperty: managedIdentity

Anteckning

Den här egenskapen måste endast anges i skyddade inställningar.This property must be specified in protected settings only.

CustomScript (version 2,1 och senare) stöder hanterad identitet för hämtning av filer från URL: er som finns i inställningen "fileUris".CustomScript (version 2.1 onwards) supports managed identity for downloading file(s) from URLs provided in the "fileUris" setting. Det ger CustomScript åtkomst till Azure Storage privata blobbar eller behållare utan att användaren måste skicka hemligheter som SAS-token eller lagrings konto nycklar.It allows CustomScript to access Azure Storage private blobs or containers without the user having to pass secrets like SAS tokens or storage account keys.

Om du vill använda den här funktionen måste användaren lägga till en tilldelad eller användardefinierad identitet till den virtuella datorn eller VMSS där CustomScript förväntas köras, och ge hanterad identitets åtkomst till Azure Storage containern eller blobben.To use this feature, the user must add a system-assigned or user-assigned identity to the VM or VMSS where CustomScript is expected to run, and grant the managed identity access to the Azure Storage container or blob.

Om du vill använda den systemtilldelade identiteten på den virtuella mål datorn/VMSS anger du fältet managedidentity till ett tomt JSON-objekt.To use the system-assigned identity on the target VM/VMSS, set "managedidentity" field to an empty json object.

Exempel:Example:

{
  "fileUris": ["https://mystorage.blob.core.windows.net/privatecontainer/script1.sh"],
  "commandToExecute": "sh script1.sh",
  "managedIdentity" : {}
}

Om du vill använda den användardefinierade identiteten på den virtuella mål datorn/VMSS konfigurerar du fältet managedidentity med klient-ID: t eller objekt-ID: t för den hanterade identiteten.To use the user-assigned identity on the target VM/VMSS, configure "managedidentity" field with the client ID or the object ID of the managed identity.

Exempel:Examples:

{
  "fileUris": ["https://mystorage.blob.core.windows.net/privatecontainer/script1.sh"],
  "commandToExecute": "sh script1.sh",
  "managedIdentity" : { "clientId": "31b403aa-c364-4240-a7ff-d85fb6cd7232" }
}
{
  "fileUris": ["https://mystorage.blob.core.windows.net/privatecontainer/script1.sh"],
  "commandToExecute": "sh script1.sh",
  "managedIdentity" : { "objectId": "12dd289c-0583-46e5-b9b4-115d5c19ef4b" }
}

Anteckning

Egenskapen managedIdentity får inte användas tillsammans med storageAccountName-eller storageAccountKey-egenskapermanagedIdentity property must not be used in conjunction with storageAccountName or storageAccountKey properties

MalldistributionTemplate deployment

Azure VM-tillägg kan distribueras med Azure Resource Manager mallar.Azure VM extensions can be deployed with Azure Resource Manager templates. Det JSON-schema som beskrivs i föregående avsnitt kan användas i en Azure Resource Manager mall för att köra det anpassade skript tillägget under en Azure Resource Manager mall-distribution.The JSON schema detailed in the previous section can be used in an Azure Resource Manager template to run the Custom Script Extension during an Azure Resource Manager template deployment. En exempel mall som innehåller tillägget för anpassat skript hittar du här, GitHub.A sample template that includes the Custom Script Extension can be found here, GitHub.

{
  "name": "config-app",
  "type": "extensions",
  "location": "[resourceGroup().location]",
  "apiVersion": "2019-03-01",
  "dependsOn": [
    "[concat('Microsoft.Compute/virtualMachines/', concat(variables('vmName'),copyindex()))]"
  ],
  "tags": {
    "displayName": "config-app"
  },
  "properties": {
    "publisher": "Microsoft.Azure.Extensions",
    "type": "CustomScript",
    "typeHandlerVersion": "2.1",
    "autoUpgradeMinorVersion": true,
    "settings": {
      },
    "protectedSettings": {
      "commandToExecute": "sh hello.sh <param2>",
      "fileUris": ["https://github.com/MyProject/Archive/hello.sh"
      ]  
    }
  }
}

Anteckning

Dessa egenskaps namn är Skift läges känsliga.These property names are case-sensitive. Använd de namn som visas här för att undvika distributions problem.To avoid deployment problems, use the names as shown here.

Azure CLIAzure CLI

När du använder Azure CLI för att köra det anpassade skript tillägget skapar du en konfigurations fil eller filer.When you're using Azure CLI to run the Custom Script Extension, create a configuration file or files. Du måste minst ha "commandToExecute".At a minimum, you must have 'commandToExecute'.

az vm extension set \
  --resource-group myResourceGroup \
  --vm-name myVM --name customScript \
  --publisher Microsoft.Azure.Extensions \
  --protected-settings ./script-config.json

Alternativt kan du ange inställningarna i kommandot som en JSON-formaterad sträng.Optionally, you can specify the settings in the command as a JSON formatted string. Detta gör att konfigurationen kan anges under körningen och utan en separat konfigurations fil.This allows the configuration to be specified during execution and without a separate configuration file.

az vm extension set \
  --resource-group exttest \
  --vm-name exttest \
  --name customScript \
  --publisher Microsoft.Azure.Extensions \
  --protected-settings '{"fileUris": ["https://raw.githubusercontent.com/Microsoft/dotnet-core-sample-templates/master/dotnet-core-music-linux/scripts/config-music.sh"],"commandToExecute": "./config-music.sh"}'

Azure CLI-exempelAzure CLI examples

Offentlig konfiguration med skript filPublic configuration with script file

{
  "fileUris": ["https://raw.githubusercontent.com/Microsoft/dotnet-core-sample-templates/master/dotnet-core-music-linux/scripts/config-music.sh"],
  "commandToExecute": "./config-music.sh"
}

Azure CLI-kommando:Azure CLI command:

az vm extension set \
  --resource-group myResourceGroup \
  --vm-name myVM --name customScript \
  --publisher Microsoft.Azure.Extensions \
  --settings ./script-config.json

Offentlig konfiguration utan skript filPublic configuration with no script file

{
  "commandToExecute": "apt-get -y update && apt-get install -y apache2"
}

Azure CLI-kommando:Azure CLI command:

az vm extension set \
  --resource-group myResourceGroup \
  --vm-name myVM --name customScript \
  --publisher Microsoft.Azure.Extensions \
  --settings ./script-config.json

Offentliga och skyddade konfigurationsfilerPublic and protected configuration files

Du kan använda en offentlig konfigurations fil för att ange skript filens URI.You use a public configuration file to specify the script file URI. Du använder en skyddad konfigurations fil för att ange kommandot som ska köras.You use a protected configuration file to specify the command to be run.

Offentlig konfigurations fil:Public configuration file:

{
  "fileUris": ["https://raw.githubusercontent.com/Microsoft/dotnet-core-sample-templates/master/dotnet-core-music-linux/scripts/config-music.sh"]
}

Skyddad konfigurations fil:Protected configuration file:

{
  "commandToExecute": "./config-music.sh <param1>"
}

Azure CLI-kommando:Azure CLI command:

az vm extension set \
  --resource-group myResourceGroup \
  --vm-name myVM \ 
  --name customScript \
  --publisher Microsoft.Azure.Extensions \
  --settings ./script-config.json \
  --protected-settings ./protected-config.json

FelsökningTroubleshooting

När det anpassade skript tillägget körs, skapas eller laddas skriptet ned till en katalog som liknar följande exempel.When the Custom Script Extension runs, the script is created or downloaded into a directory that's similar to the following example. Kommandots utdata sparas också i den här katalogen i stdout och stderr filer.The command output is also saved into this directory in stdout and stderr files.

/var/lib/waagent/custom-script/download/0/

Du kan felsöka genom att först kontrol lera loggen för Linux-agenten, se till att tillägget har körts, se:To troubleshoot, first check the Linux Agent Log, ensure the extension ran, check:

/var/log/waagent.log 

Du bör söka efter tilläggs körningen, det ser ut ungefär så här:You should look for the extension execution, it will look something like:

2018/04/26 17:47:22.110231 INFO [Microsoft.Azure.Extensions.customScript-2.0.6] [Enable] current handler state is: notinstalled
2018/04/26 17:47:22.306407 INFO Event: name=Microsoft.Azure.Extensions.customScript, op=Download, message=Download succeeded, duration=167
2018/04/26 17:47:22.339958 INFO [Microsoft.Azure.Extensions.customScript-2.0.6] Initialize extension directory
2018/04/26 17:47:22.368293 INFO [Microsoft.Azure.Extensions.customScript-2.0.6] Update settings file: 0.settings
2018/04/26 17:47:22.394482 INFO [Microsoft.Azure.Extensions.customScript-2.0.6] Install extension [bin/custom-script-shim install]
2018/04/26 17:47:23.432774 INFO Event: name=Microsoft.Azure.Extensions.customScript, op=Install, message=Launch command succeeded: bin/custom-script-shim install, duration=1007
2018/04/26 17:47:23.476151 INFO [Microsoft.Azure.Extensions.customScript-2.0.6] Enable extension [bin/custom-script-shim enable]
2018/04/26 17:47:24.516444 INFO Event: name=Microsoft.Azure.Extensions.customScript, op=Enable, message=Launch command succeeded: bin/custom-sc

Några saker att tänka på:Some points to note:

  1. Aktivera är när kommandot börjar köras.Enable is when the command starts running.
  2. Hämtningen är relaterad till nedladdningen av CustomScript-tilläggs paketet från Azure, inte skriptfilerna som anges i fileUris.Download relates to the downloading of the CustomScript extension package from Azure, not the script files specified in fileUris.

Azure-skriptets tillägg skapar en logg, som du hittar här:The Azure Script Extension produces a log, which you can find here:

/var/log/azure/custom-script/handler.log

Du bör söka efter den enskilda körningen. den ser ut ungefär så här:You should look for the individual execution, it will look something like:

time=2018-04-26T17:47:23Z version=v2.0.6/git@1008306-clean operation=enable seq=0 event=start
time=2018-04-26T17:47:23Z version=v2.0.6/git@1008306-clean operation=enable seq=0 event=pre-check
time=2018-04-26T17:47:23Z version=v2.0.6/git@1008306-clean operation=enable seq=0 event="comparing seqnum" path=mrseq
time=2018-04-26T17:47:23Z version=v2.0.6/git@1008306-clean operation=enable seq=0 event="seqnum saved" path=mrseq
time=2018-04-26T17:47:23Z version=v2.0.6/git@1008306-clean operation=enable seq=0 event="reading configuration"
time=2018-04-26T17:47:23Z version=v2.0.6/git@1008306-clean operation=enable seq=0 event="read configuration"
time=2018-04-26T17:47:23Z version=v2.0.6/git@1008306-clean operation=enable seq=0 event="validating json schema"
time=2018-04-26T17:47:23Z version=v2.0.6/git@1008306-clean operation=enable seq=0 event="json schema valid"
time=2018-04-26T17:47:23Z version=v2.0.6/git@1008306-clean operation=enable seq=0 event="parsing configuration json"
time=2018-04-26T17:47:23Z version=v2.0.6/git@1008306-clean operation=enable seq=0 event="parsed configuration json"
time=2018-04-26T17:47:23Z version=v2.0.6/git@1008306-clean operation=enable seq=0 event="validating configuration logically"
time=2018-04-26T17:47:23Z version=v2.0.6/git@1008306-clean operation=enable seq=0 event="validated configuration"
time=2018-04-26T17:47:23Z version=v2.0.6/git@1008306-clean operation=enable seq=0 event="creating output directory" path=/var/lib/waagent/custom-script/download/0
time=2018-04-26T17:47:23Z version=v2.0.6/git@1008306-clean operation=enable seq=0 event="created output directory"
time=2018-04-26T17:47:23Z version=v2.0.6/git@1008306-clean operation=enable seq=0 files=1
time=2018-04-26T17:47:23Z version=v2.0.6/git@1008306-clean operation=enable seq=0 file=0 event="download start"
time=2018-04-26T17:47:23Z version=v2.0.6/git@1008306-clean operation=enable seq=0 file=0 event="download complete" output=/var/lib/waagent/custom-script/download/0
time=2018-04-26T17:47:23Z version=v2.0.6/git@1008306-clean operation=enable seq=0 event="executing command" output=/var/lib/waagent/custom-script/download/0
time=2018-04-26T17:47:23Z version=v2.0.6/git@1008306-clean operation=enable seq=0 event="executing protected commandToExecute" output=/var/lib/waagent/custom-script/download/0
time=2018-04-26T17:47:23Z version=v2.0.6/git@1008306-clean operation=enable seq=0 event="executed command" output=/var/lib/waagent/custom-script/download/0
time=2018-04-26T17:47:23Z version=v2.0.6/git@1008306-clean operation=enable seq=0 event=enabled
time=2018-04-26T17:47:23Z version=v2.0.6/git@1008306-clean operation=enable seq=0 event=end

Här kan du se:Here you can see:

  • Kommandot Aktivera startar är den här loggenThe Enable command starting is this log
  • Inställningarna som överförs till tilläggetThe settings passed to the extension
  • Tillägget laddar ned filen och resultatet av det.The extension downloading file and the result of that.
  • Kommandot som körs och resultatet.The command being run and the result.

Du kan också hämta körnings statusen för det anpassade skript tillägget, inklusive de faktiska argument som skickas som med commandToExecute hjälp av Azure CLI:You can also retrieve the execution state of the Custom Script Extension including the actual arguments passed as the commandToExecute by using Azure CLI:

az vm extension list -g myResourceGroup --vm-name myVM

Utdata ser ut som följande text:The output looks like the following text:

[
  {
    "autoUpgradeMinorVersion": true,
    "forceUpdateTag": null,
    "id": "/subscriptions/subscriptionid/resourceGroups/rgname/providers/Microsoft.Compute/virtualMachines/vmname/extensions/customscript",
    "resourceGroup": "rgname",
    "settings": {
      "commandToExecute": "sh script.sh > ",
      "fileUris": [
        "https://catalogartifact.azureedge.net/publicartifacts/scripts/script.sh",
        "https://catalogartifact.azureedge.net/publicartifacts/scripts/script.sh"
      ]
    },
    "tags": null,
    "type": "Microsoft.Compute/virtualMachines/extensions",
    "typeHandlerVersion": "2.0",
    "virtualMachineExtensionType": "CustomScript"
  },
  {
    "autoUpgradeMinorVersion": true,
    "forceUpdateTag": null,
    "id": "/subscriptions/subscriptionid/resourceGroups/rgname/providers/Microsoft.Compute/virtualMachines/vmname/extensions/OmsAgentForLinux",
    "instanceView": null,
    "location": "eastus",
    "name": "OmsAgentForLinux",
    "protectedSettings": null,
    "provisioningState": "Succeeded",
    "publisher": "Microsoft.EnterpriseCloud.Monitoring",
    "resourceGroup": "rgname",
    "settings": {
      "workspaceId": "workspaceid"
    },
    "tags": null,
    "type": "Microsoft.Compute/virtualMachines/extensions",
    "typeHandlerVersion": "1.0",
    "virtualMachineExtensionType": "OmsAgentForLinux"
  }
]

Nästa stegNext steps

Om du vill se kod, aktuella problem och versioner, se lagrings platsen för anpassade skript-tillägg – Linux.To see the code, current issues and versions, see custom-script-extension-linux repo.