Linux sanal makineleriyle Azure Özel Betik Uzantısı Sürüm 2’yi kullanma

Dikkat

Bu makalede, Kullanım Süresi Sonu (EOL) durumuna yakın bir Linux dağıtımı olan CentOS'a başvuruda bulunur. Lütfen kullanımınızı göz önünde bulundurun ve uygun şekilde planlayın. Daha fazla bilgi için bkz . CentOS Kullanım Süresi Sonu kılavuzu.

Özel Betik Uzantısı Sürüm 2, Azure sanal makinelerinde (VM) betikleri indirir ve çalıştırır. Dağıtım sonrası yapılandırma, yazılım yüklemesi veya başka bir yapılandırma veya yönetim görevi için bu uzantıyı kullanın. Betikleri Azure Depolama veya başka bir erişilebilir İnternet konumundan indirebilir veya uzantı çalışma zamanına sağlayabilirsiniz.

Özel Betik Uzantısı, Azure Resource Manager şablonlarıyla tümleşir. Azure CLI, Azure PowerShell veya Azure Sanal Makineler REST API'sini kullanarak da çalıştırabilirsiniz.

Bu makalede, Azure CLI'dan Özel Betik Uzantısı'nın nasıl kullanılacağı ve Azure Resource Manager şablonu kullanılarak uzantının nasıl çalıştırıldığı açıklanır. Bu makalede Linux sistemleri için sorun giderme adımları da sağlanır.

Özel Betik Uzantısı'nın iki sürümü vardır:

  • Sürüm 1: Microsoft.OSTCExtensions.CustomScriptForLinux
  • Sürüm 2: Microsoft.Azure.Extensions.CustomScript

Yeni ve mevcut dağıtımlar için Sürüm 2'i kullanın. Yeni sürüm bir açılan sürümdür. Geçiş, adı ve sürümü değiştirmek kadar kolaydır. Uzantı yapılandırmanızı değiştirmeniz gerekmez.

Önkoşullar

Desteklenen Linux dağıtımları

Dağıtım 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+ Desteklenmiyor
Oracle Linux 6.4+, 7.x+, 8.x+ Desteklenmiyor
Red Hat Enterprise Linux 6.7+, 7.x+, 8.x+, 9.x+ 8.6+, 9.x+
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+

Betik konumu

Uzantıyı Azure Blob Depolama'ya erişebilmesi için Azure Blob Depolama kimlik bilgilerinizi kullanacak şekilde ayarlayabilirsiniz. Sanal makine, GitHub veya iç dosya sunucusu gibi bir uç noktaya yönlendirebildiği sürece betik konumu her yer olabilir.

İnternet bağlantısı

Betiği GitHub veya Azure Depolama gibi bir dış konumdan indirmek için diğer güvenlik duvarı veya ağ güvenlik grubu (NSG) bağlantı noktalarını açmanız gerekir. Örneğin, betiğiniz Azure Depolama'da bulunuyorsa Depolama için Azure NSG hizmet etiketlerini kullanarak erişime izin verebilirsiniz.

Betiğiniz yerel bir sunucuda olsa bile diğer güvenlik duvarı veya NSG bağlantı noktalarını açmanız gerekebilir.

İpuçları

  • Bu uzantı için en yüksek hata oranı betikteki söz dizimi hatalarından kaynaklanır. Betiğin hatasız çalıştığını doğrulayın. Hataları bulmayı kolaylaştırmak için betiğe daha fazla günlük kaydı ekleyin.
  • Bir kez etkili betikler yazın. Böylece yanlışlıkla birden fazla çalıştırılan betikler sistem değişikliklerine neden olmaz.
  • Betiklerin çalışırken kullanıcı girişi gerektirmediğinden emin olun.
  • Betiğin 90 dakika çalışmasına izin verilir. Daha uzun olan betikler uzantının sağlanamamasına neden olur.
  • Betiğin içine yeniden başlatmalar yerleştirmeyin. Yeniden başlatma, yüklenen diğer uzantılarla ilgili sorunlara neden olur ve uzantı yeniden başlatıldıktan sonra devam etmez.
  • Uygulamaları yüklemeden ve betikleri çalıştırmadan önce yeniden başlatmaya neden olan bir betiğiniz varsa, yeniden başlatmayı Windows bir cron işi veya DSC, Chef ya da Puppet uzantıları gibi araçlar kullanarak zamanlayın.
  • Azure Linux Aracısı'nın durdurulmasına veya güncelleştirilmesine neden olan bir betik çalıştırmayın. Bunun yapılması uzantıyı geçiş durumunda bırakabilir ve zaman aşımına neden olabilir.
  • Uzantı bir betiği yalnızca bir kez çalıştırır. Bir betiği her başlangıçta çalıştırmak istiyorsanız cloud-init görüntüsü ve Önyükleme Başına Betikler modülü kullanabilirsiniz. Alternatif olarak, betiği kullanarak bir systemd hizmet birimi oluşturabilirsiniz.
  • Sanal makineye bir uzantının yalnızca bir sürümünü uygulayabilirsiniz. İkinci bir özel betik çalıştırmak için mevcut uzantıyı yeni bir yapılandırmayla güncelleştirin. Alternatif olarak, Özel Betik Uzantısını kaldırabilir ve güncelleştirilmiş betikle yeniden uygulayabilirsiniz.
  • Betiğin çalıştırılacağı zamanı belirlemek istiyorsanız uzantıyı kullanarak bir bir cron işi oluşturun.
  • Betik çalışırken Azure portal veya CLI üzerinden uzantı durumunu yalnızca geçiş durumunda şeklinde görürsünüz. Çalışan bir betikle ilgili daha sık durum güncelleştirmesi almak isterseniz kendi çözümünüzü oluşturun.
  • Özel Betik Uzantısı, ara sunucuları yerel olarak desteklemez. Bununla birlikte betiğinizin içinde ara sunucuları destekleyen Curl gibi bir dosya aktarım aracı kullanabilirsiniz.
  • Betiklerinizin veya komutlarınızın kullanıyor olabileceği varsayılan olmayan dizin konumlarına dikkat edin. Bu durumla başa çıkmak için bir mantık oluşturun.

Uzantı şeması

Özel Betik Uzantısı yapılandırması, betik konumu ve çalıştırılacak komut gibi öğeleri belirtir. Bu bilgileri yapılandırma dosyalarında depolayabilir, komut satırında belirtebilir veya bir Azure Resource Manager şablonunda belirtebilirsiniz.

Hassas verileri korumalı bir yapılandırmada depolayabilirsiniz. Bu yapılandırma şifrelenmiştir ve yalnızca hedef VM'de şifresi çözülür. Korumalı yapılandırma, yürütme komutu parola gibi gizli diziler içerdiğinde kullanışlıdır. Bir örnek aşağıda verilmiştir:

{
  "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>"
    }
  }
}

Not

özelliği managedIdentity veya özelliğiyle storageAccountName birlikte kullanılmamalıdırstorageAccountKey.

Özellik değerleri

Veri Akışı Adı Değer veya örnek Veri türü
apiVersion 2019-03-01 tarih
Yayımcı Microsoft.Azure.Extensions Dize
Tür CustomScript Dize
typeHandlerVersion 2.1 int
fileUris https://github.com/MyProject/Archive/MyPythonScript.py dizi
commandToExecute python MyPythonScript.py \<my-param1> Dize
betiğini çalıştırın IyEvYmluL3NoCmVjaG8gIlVwZGF0aW5nIHBhY2thZ2VzIC4uLiIKYXB0IHVwZGF0ZQphcHQgdXBncmFkZSAteQo= Dize
skipDos2Unix false boolean
timestamp 123456789 32 bit tamsayı
storageAccountName examplestorageacct Dize
storageAccountKey TmJK/1N3AbAZ3q/+hOXoi/l73zOqsaxXDhqa9Y83/v5UpXQp2DQIBuv2Tifp60cE/OaHsJZmQZ7teQfczQj8hg== Dize
managedIdentity { }veya veya { "clientId": "31b403aa-c364-4240-a7ff-d85fb6cd7232" }{ "objectId": "12dd289c-0583-46e5-b9b4-115d5c19ef4b" } JSON nesnesi

Özellik değeri ayrıntıları

Özellik İsteğe bağlı veya gerekli Ayrıntılar
apiVersion Uygulanamaz Kaynak Gezgini'ni veya Azure CLI'daki komutunu az provider list -o json kullanarak en güncel API sürümünü bulabilirsiniz.
fileUris İsteğe bağlı İndirilecek dosyaların URL'leri.
commandToExecute Ayarlı değilse script gereklidir Çalıştırılacak giriş noktası betiği. Komutunuz parolalar gibi gizli diziler içeriyorsa yerine script bu özelliği kullanın.
betiğini çalıştırın Ayarlı değilse commandToExecute gereklidir tarafından /bin/shçalıştırılan Base64 kodlu ve isteğe bağlı olarak gzip'ed betiği.
skipDos2Unix İsteğe bağlı Betik tabanlı dosya URL'lerinin false veya betiklerinin dos2unix dönüştürmesini atlamak istiyorsanız bu değeri olarak ayarlayın.
timestamp İsteğe bağlı Bu değeri yalnızca betiğin yeniden çalıştırılmasını tetikleecek şekilde değiştirin. Herhangi bir tamsayı değeri, önceki değerden farklı olduğu sürece kabul edilebilir.
storageAccountName İsteğe bağlı Depolama hesabının adı. Depolama kimlik bilgilerini belirtirseniz tüm fileUris değerlerin Azure blobları için URL'ler olması gerekir.
storageAccountKey İsteğe bağlı Depolama hesabının erişim anahtarı.
managedIdentity İsteğe bağlı Dosyaları indirmek için yönetilen kimlik. Değerler clientId , yönetilen kimliğin istemci kimliği olan (isteğe bağlı, dize) ve objectId yönetilen kimliğin nesne kimliği olan (isteğe bağlı, dize) değerleridir.

Genel ayarlar , betiğin çalıştığı VM'ye düz metin olarak gönderilir. Korumalı ayarlar yalnızca Azure ve VM tarafından bilinen bir anahtar aracılığıyla şifrelenir. Ayarlar vm'ye gönderildikçe kaydedilir. Başka bir ifadeyle, ayarlar şifrelendiyse vm'ye şifrelenir. Şifrelenmiş değerlerin şifresini çözmek için kullanılan sertifika VM'de depolanır. Sertifika, gerekirse çalışma zamanında ayarların şifresini çözmek için de kullanılır.

Genel ayarları kullanmak hata ayıklama için yararlı olabilir, ancak korumalı ayarları kullanmanızı kesinlikle öneririz.

Genel veya korumalı ayarlarda aşağıdaki değerleri ayarlayabilirsiniz. Uzantı, bu değerlerin hem genel hem de korumalı ayarlarda ayarlandığı tüm yapılandırmaları reddeder.

  • commandToExecute
  • script
  • fileUris

Özellik: skipDos2Unix

Özel Betik Uzantısı'nın önceki sürümü, Microsoft.OSTCExtensions.CustomScriptForLinuxolarak çevirerek \r\n DOS dosyalarını otomatik olarak UNIX dosyalarına \ndönüştürür. Bu çeviri hala var ve varsayılan olarak açık. Bu dönüştürme, aşağıdaki ölçütlerden birini temel alarak dosyasından fileUris indirilen tüm dosyalara veya betik ayarına uygulanır:

  • Uzantı .sh, .txt, .py veya .pl. /bin/sh ile çalıştırılan bir betik olduğu varsayıldığından, betik ayarı her zaman bu ölçütle eşleşir. Betik ayarı VM'de script.sh olarak kaydedilir.
  • Dosya ile #!başlar.

Varsayılan değer olan false, dos2unix dönüştürmesinin yürütüldiği anlamına gelir. öğesini ayarlayarak skipDos2Unix dos2unix dönüştürmesini trueatlayabilirsiniz:

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

Özellik: betik

Özel Betik Uzantısı, kullanıcı tanımlı bir betiğin yürütülmesini destekler. Betik ayarları ve fileUris öğesini tek bir ayarda birleştirircommandToExecute. Azure Depolama veya GitHub gist'ten indirmek üzere bir dosya ayarlamak yerine betiği bir ayar olarak kodlayabilirsiniz. ve fileUrisöğesini değiştirmek commandToExecute için betiği kullanabilirsiniz.

Bazı gereksinimler şunlardır:

  • Betiğin Base64 kodlanmış olması gerekir.
  • Betik isteğe bağlı olarak gzip'ed olabilir.
  • Betik ayarını genel veya korumalı ayarlarda kullanabilirsiniz.
  • Betik parametresi verilerinin boyutu üst sınırı 256 KB'tır. Betik bu boyutu aşarsa çalışmaz.

Örneğin, aşağıdaki betik /script.sh/ dosyasına kaydedilir:

#!/bin/sh
echo "Creating directories ..."
mkdir /data
chown user:user /data
mkdir /appdata
chown user:user /appdata

Aşağıdaki komutun çıktısını alarak doğru Özel Betik Uzantısı betik ayarını oluşturursunuz:

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

Çoğu durumda, boyutu daha da küçültmek için betik isteğe bağlı olarak gzip'ed olabilir. Özel Betik Uzantısı, gzip sıkıştırmasının kullanımını otomatik olarak algılar.

cat script | gzip -9 | base64 -w 0

Özel Betik Uzantısı, bir betik çalıştırmak için aşağıdaki algoritmayı kullanır:

  1. Betiğin değerinin uzunluğunun 256 KB'ı aşmadığını onaylar.
  2. Base64 betiğin değerinin kodunu çözer.
  3. Base64 kodu çözülen değeri gunzip etmeye çalışın .
  4. Kodu çözülen ve isteğe bağlı olarak sıkıştırılmış değeri diske yazın: /var/lib/waagent/custom-script/#/script.sh.
  5. komutunu kullanarak _/bin/sh -c /var/lib/waagent/custom-script/#/script.shbetiği çalıştırın.

Özellik: managedIdentity

Not

Bu özellik yalnızca korumalı ayarlarda belirtilmelidir .

Sürüm 2.1 ve üzeri olan Özel Betik Uzantısı, ayarda fileUris sağlanan URL'lerden dosya indirmek için yönetilen kimlikleri destekler. Bu yaklaşım, Kullanıcının paylaşılan erişim imzası (SAS) belirteçleri veya depolama hesabı anahtarları gibi gizli dizileri geçirmesine gerek kalmadan Özel Betik Uzantısı'nın Azure Depolama özel bloblarına veya kapsayıcılarına erişmesini sağlar.

Bu özelliği kullanmak için, Özel Betik Uzantısının çalıştırılmasının beklendiği VM veya Sanal Makine Ölçek Kümesine sistem tarafından atanan veya kullanıcı tarafından atanan bir kimlik ekleyin. Ardından yönetilen kimliğe Azure Depolama kapsayıcısına veya bloba erişim verin.

Hedef VM veya Sanal Makine Ölçek Kümesinde sistem tarafından atanan kimliği kullanmak için boş bir JSON nesnesine ayarlayın managedidentity .

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

Hedef VM veya Sanal Makine Ölçek Kümesinde kullanıcı tarafından atanan kimliği kullanmak için, istemci kimliği veya yönetilen kimliğin nesne kimliğiyle yapılandırın managedidentity .

{
  "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" }
}

Not

özelliği managedIdentity veya özelliğiyle storageAccountName birlikte kullanılmamalıdırstorageAccountKey.

Şablon dağıtımı

Azure Resource Manager şablonlarını kullanarak Azure VM uzantılarını dağıtabilirsiniz. Önceki bölümde ayrıntılarıyla belirtilen JSON şeması, bir Azure Resource Manager şablonunda, şablonun dağıtımı sırasında Özel Betik Uzantısı'nı çalıştırmak için kullanılabilir. GitHub'da Özel Betik Uzantısını içeren örnek bir şablon bulabilirsiniz.

{
  "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"
      ]
    }
  }
}

Not

Bu özellik adları büyük/küçük harfe duyarlıdır. Dağıtım sorunlarını önlemek için burada gösterildiği gibi adları kullanın.

Azure CLI

Özel Betik Uzantısı'nı çalıştırmak için Azure CLI'yı kullandığınızda, bir yapılandırma dosyası veya dosyaları oluşturun. Yapılandırma dosyası en azından içermelidir commandToExecute. Komutu yapılandırma az vm extension set dosyasına başvurur:

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

Alternatif olarak, komuttaki ayarları JSON biçimli bir dize olarak belirtebilirsiniz. Bu yaklaşım, yürütme sırasında ve ayrı bir yapılandırma dosyası olmadan yapılandırmanın belirtilmesine olanak tanır.

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"}'

Örnek: Betik dosyasıyla genel yapılandırma

Bu örnekte, script-config.json adlı aşağıdaki betik dosyası kullanılır:

{
  "fileUris": ["https://raw.githubusercontent.com/Microsoft/dotnet-core-sample-templates/master/dotnet-core-music-linux/scripts/config-music.sh"],
  "commandToExecute": "./config-music.sh"
}
  1. Betik dosyasını, istediğiniz metin düzenleyicisini veya aşağıdaki CLI komutunu kullanarak oluşturun:

    cat <<EOF > script-config.json
    {
      "fileUris": ["https://raw.githubusercontent.com/Microsoft/dotnet-core-sample-templates/master/dotnet-core-music-linux/scripts/config-music.sh"],
      "commandToExecute": "./config-music.sh"
    }
    EOF
    
  2. Şu komutu çalıştırın:

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

Örnek: Betik dosyası olmayan genel yapılandırma

Bu örnekte aşağıdaki JSON biçimli içerik kullanılır:

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

Şu komutu çalıştırın:

az vm extension set \
  --resource-group tim0329vmRG \
  --vm-name tim0329vm --name customScript \
  --publisher Microsoft.Azure.Extensions \
  --settings '{"commandToExecute": "apt-get -y update && apt-get install -y apache2"}'

Örnek: Genel ve korumalı yapılandırma dosyaları

Betik dosyasının URI'sini belirtmek için bir genel yapılandırma dosyası kullanın:

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

Çalıştırılacak komutu belirtmek için korumalı bir yapılandırma dosyası kullanın:

{
  "commandToExecute": "./config-music.sh"
}
  1. İstediğiniz metin düzenleyicisini veya aşağıdaki CLI komutunu kullanarak genel yapılandırma dosyasını oluşturun:

    cat <<EOF > script-config.json
    {
      "fileUris": ["https://raw.githubusercontent.com/Microsoft/dotnet-core-sample-templates/master/dotnet-core-music-linux/scripts/config-music.sh"]
    }
    EOF
    
  2. İstediğiniz metin düzenleyicisini veya aşağıdaki CLI komutunu kullanarak korumalı yapılandırma dosyasını oluşturun:

    cat <<EOF > protected-config.json
    {
      "commandToExecute": "./config-music.sh"
    }
    EOF
    
  3. Şu komutu çalıştırın:

    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
    

Sanal Makine Ölçek Kümeleri

Özel Betik Uzantısı'nı Azure portalından dağıtırsanız depolama hesabınızdaki betiklere erişmek için SAS belirtecinin süresinin dolması üzerinde denetiminiz yoktur. İlk dağıtım çalışır, ancak depolama hesabının SAS belirtecinin süresi dolduğunda, Özel Betik Uzantısı artık depolama hesabına erişemediğinden sonraki ölçeklendirme işlemleri başarısız olur.

Özel Betik Uzantısını bir Sanal Makine Ölçek Kümesine dağıtırken PowerShell, Azure CLI veya Azure Resource Manager şablonu kullanmanızı öneririz. Bu şekilde, yönetilen kimlik kullanmayı seçebilir veya ihtiyacınız olduğu sürece depolama hesabınızdaki betiklere erişmek için SAS belirtecinin süresinin dolmak üzere doğrudan denetimine sahip olabilirsiniz.

Sorun giderme

Özel Betik Uzantısı çalıştırıldığında betik oluşturulur veya aşağıdaki örneğe benzer bir dizine indirilir. Komut çıktısı ve dosyalarında da bu dizine stdoutstderr kaydedilir.

sudo ls -l /var/lib/waagent/custom-script/download/0/

Sorun gidermek için önce Linux Aracısı günlüğünü denetleyin ve uzantının çalıştığından emin olun:

sudo cat /var/log/waagent.log

Uzantı yürütmeyi arayın. Şuna benzer:

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

Önceki çıkışta:

  • Enable , komutun çalışmaya başladığı zamandır.
  • Download , içinde belirtilen betik dosyalarını değil, Azure'dan Özel Betik Uzantısı paketinin indirilmesiyle fileUrisilgilidir.

Azure Betik Uzantısı, burada bulabileceğiniz bir günlük oluşturur:

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

Tek tek yürütmeyi arayın. Şuna benzer:

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

Burada şunları görebilirsiniz:

  • enable Bu günlüğü başlatan komut.
  • Uzantıya geçirilen ayarlar.
  • Uzantının dosyayı indirmesi ve bu eylemin sonucu.
  • Çalıştırılan komut ve sonuç.

Azure CLI kullanarak, olarak commandToExecutegeçirilen gerçek bağımsız değişkenler de dahil olmak üzere Özel Betik Uzantısı'nın yürütme durumunu da alabilirsiniz:

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

Çıktı aşağıdaki metne benzer:

[
  {
    "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"
  }
]

Azure CLI söz dizimi sorunları

Azure CLI çeşitli kabuk ortamlarında çalışabilir, ancak hafif biçim çeşitlemeleriyle. Azure CLI komutlarıyla ilgili beklenmeyen sonuçlara sahipseniz bkz . Azure CLI'yi başarıyla kullanma.

Sonraki adımlar

Kodu, geçerli sorunları ve sürümleri görmek için bkz . custom-script-extension-linux.