Aracılığıyla paylaş


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

Ö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'dan 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 entegre olur. 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 Komut Dosyası 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 doğrudan değiştirilebilir bir yedektir. Geçiş, adı ve sürümü değiştirmek kadar kolaydır. Uzantı yapılandırmanızı değiştirmeniz gerekmez.

Not

Daha hızlı tanılama için VM yardımını deneyin. Windows için VM yardımını veya Linux için VM yardımını çalıştırmanızı öneririz. Bu betik tabanlı tanılama araçları, Azure VM Konuk Aracısı'nı ve genel VM durumunu etkileyen yaygın sorunları belirlemenize yardımcı olur.

Sanal makinelerle ilgili performans sorunları yaşıyorsanız desteğe başvurmadan önce bu araçları çalıştırın.

Önkoşullar

Desteklenen Linux dağıtımları

Publisher Dağıtım x64 ARM64
Alma Linux Topluluğu 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 Projesi openSUSE 12.3+ Desteklenmiyor
Oracle Oracle Linux 6.4+, 7.x+, 8.x+ Desteklenmiyor
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+
Kurallı Ubuntu (LTS sürümleri) 18.04+, 20.04+, 22.04+, 24.04+ 20.04+, 22.04+, 24.04+

Komut dosyası konumu

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

İnternet bağlantısı

Komut dosyasını GitHub veya Azure Depolama gibi dış bir konumdan indirmek için diğer ağ güvenlik grubu (NSG) veya güvenlik duvarı 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 başka güvenlik duvarı veya NSG portları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 log ekleyin.
  • Idempotent betikler yazın, böylece yanlışlıkla birden fazla çalıştırıldığında sistem değişikliklerine neden olmazlar.
  • Betiklerin çalışırken kullanıcı girişi gerektirmediğinden emin olun.
  • Betiğin çalışması için 90 dakika süre tanınmıştır. Daha uzun olan her şey uzantının sağlanamamasına neden olur.
  • Yazılım betiğine yeniden başlatma komutları eklemeyin. 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ı 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şlatmada çalıştırmak istiyorsanız bir 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 ne zaman çalışacağını programlamak istiyorsanız uzantıyı kullanarak bir cron işi oluşturun.
  • Betik çalışırken Azure portalı veya CLI üzerinden uzantı durumunu yalnızca geçiş aşamasında olarak görebilirsiniz. Ç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

managedIdentity özelliği kesinliklestorageAccountName veya storageAccountKey özelliğiyle birlikte kullanılmamalıdır.

Mülk değerleri

İsim Değer veya örnek Veri türü
apiVersion 2019-03-01 tarih
yayınevi Microsoft.Azure.Extensions Dize
Tür CustomScript Dize
typeHandlerVersion 2.1 int
fileUris https://github.com/MyProject/Archive/MyPythonScript.py dizi
Çalıştırılacak Komut python MyPythonScript.py \<my-param1> Dize
betiğini çalıştırın IyEvYmluL3NoCmVjaG8gIlVwZGF0aW5nIHBhY2thZ2VzIC4uLiIKYXB0IHVwZGF0ZQphcHQgdXBncmFkZSAteQo= Dize
skipDos2Unix false Boolean
timestamp 123456789 32 bit tamsayı
depolamaHesapAdı examplestorageacct Dize
DepolamaHesabıAnahtarı TmJK/1N3AbAZ3q/+hOXoi/l73zOqsaxXDhqa9Y83/v5UpXQp2DQIBuv2Tifp60cE/OaHsJZmQZ7teQfczQj8hg== Dize
managedIdentity { } veya { "clientId": "00001111-aaaa-2222-bbbb-3333cccc4444" } veya { "objectId": "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb" } JSON nesnesi

Özellik değeri bilgileri

Mülk İsteğe bağlı veya gerekli Ayrıntılar
apiVersion Uygulanamaz Kaynak Gezgini'nien güncel API sürümünü bulabilirsiniz.
fileUris İsteğe bağlı İndirilecek dosyaların URL'leri.
Çalıştırılacak Komut script ayarlı olmadığında 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 commandToExecute ayarlı olmadığında gereklidir /bin/sh tarafından çalıştırılan, Base64 kodlu ve gerektiğinde gzip ile sıkıştırılmış betik.
skipDos2Unix İsteğe bağlı Betik tabanlı dosya URL'lerinin veya betiklerin dos2unix çevirisini atlamak isterseniz bu değeri false 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.
depolamaHesapAdı İ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.
DepolamaHesabıAnahtarı İsteğe bağlı Depolama hesabının erişim anahtarı.
managedIdentity İsteğe bağlı Dosyaların indirilmesi 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, eğer ayarlar şifrelendiyse, şifreli bir şekilde VM'ye kaydedilir. Ş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.CustomScriptForLinux` öğesini `\r\n` olarak çevirerek DOS dosyalarını otomatik olarak UNIX dosyalarına dönüştürür. Bu çeviri hala var ve varsayılan olarak açık. Bu dönüştürme, fileUris kaynağından indirilen tüm dosyalar veya aşağıdaki ölçütlerden biri temel alınarak yapılan betik ayarları için 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. skipDos2Unix ayarını true yaparak dos2unix dönüştürmesini atlayabilirsiniz.

{
  "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ı, commandToExecute ve fileUris öğelerini tek bir ayarda birleştirir. Azure Depolama'dan veya GitHub gist'ten indirmek üzere bir dosya ayarlamak zorunda kalmak yerine betiği bir ayar olarak kodlayabilirsiniz. Betiği, commandToExecute ve fileUris öğelerini değiştirmek için kullanabilirsiniz.

Bazı gereksinimler şunlardır:

  • Betiğin Base64 kodlanmış olması gerekir.
  • Betik isteğe bağlı olarak gzip ile sıkıştırılabilir.
  • Betik ayarını kamuya açık 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ı ayarını oluşturabilirsiniz:

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

Çoğu durumda, boyutu daha da küçültmek için betik isteğe bağlı olarak gzip kullanılarak sıkıştırılabilir. Ö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ığından emin olun.
  2. Base64 ile kodlanmış betik değerini çöz.
  3. Base64 kodu çözülen değeri gunzip etmeye çalışın .
  4. Çözülen ve isteğe bağlı olarak sıkıştırılmış kod değerini diske yazın: /var/lib/waagent/custom-script/#/script.sh.
  5. _/bin/sh -c /var/lib/waagent/custom-script/#/script.sh komutunu kullanarak betiğ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 sağlanan URL'lerden dosya indirmek için yönetilen kimliklerifileUris. Bu yaklaşım, kullanıcının paylaşılan erişim imzası (SAS) belirteçleri veya depolama hesabı anahtarları gibi gizli bilgileri iletmesine gerek kalmadan, Özel Komut Dosyası 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, managedidentity'i yönetilen kimliğin istemci kimliği veya nesne kimliğiyle yapılandırın.

{
  "fileUris": ["https://mystorage.blob.core.windows.net/privatecontainer/script1.sh"],
  "commandToExecute": "sh script1.sh",
  "managedIdentity" : { "clientId": "00001111-aaaa-2222-bbbb-3333cccc4444" }
}
{
  "fileUris": ["https://mystorage.blob.core.windows.net/privatecontainer/script1.sh"],
  "commandToExecute": "sh script1.sh",
  "managedIdentity" : { "objectId": "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb" }
}

Not

managedIdentity özelliği kesinliklestorageAccountName veya storageAccountKey özelliğiyle birlikte kullanılmamalıdır.

Ş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 isimleri 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 herkese açık 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 betiğe erişmek için kullanmanız gereken SAS belirtecinin geçerlilik süresi üzerinde kontrolünüz olmaz. İ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.

Önerimiz, PowerShell, Azure CLI veya bir Azure Resource Manager şablonu kullanarak Özel Betik Uzantısını bir Sanal Makine Ölçek Kümesine dağıtmanızdır. Bu şekilde, yönetilen bir kimlik kullanmayı seçebilir veya SAS belirtecinin süresinin dolmasını doğrudan kontrol ederek depolama hesabınızdaki betiğe ihtiyacınız olduğu sürece erişebilirsiniz.

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ı, stdout ve stderr dosyalarına bu dizine 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ı çalıştırmasını 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, belirtilen betik dosyalarını değil, Özel Betik Uzantısı paketinin Azure'dan indirilmesiyle ilgilidir fileUris.

Azure Betik Eklentisi, burada bulabileceğiniz bir günlük oluşturur.

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

Bireysel 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ç.

Özel Betik Uzantısı'nın yürütme durumunu, commandToExecute olarak geçirilen gerçek bağımsız değişkenler de dahil olmak üzere, Azure CLI kullanarak 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 küçük format farklılıklarıyla. Azure CLI komutlarıyla beklenmeyen sonuçlar alıyorsanız, Azure CLI'yi Başarıyla Kullanma sayfasına bakın.

Sonraki adımlar

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