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 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+ |
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ınevi | 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.CustomScriptForLinux
olarak çevirerek \r\n
DOS dosyalarını otomatik olarak UNIX dosyalarına \n
dö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 true
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ı ve fileUris
öğesini tek bir ayarda birleştirircommandToExecute
. Azure Depolama'dan veya GitHub gist'ten indirmek üzere bir dosya ayarlamak zorunda kalmak 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:
- Betiğin değerinin uzunluğunun 256 KB'ı aşmadığını onaylar.
- Base64 betiğin değerinin kodunu çözer.
- Base64 kodu çözülen değeri gunzip etmeye çalışın .
- 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.
- komutunu kullanarak
_/bin/sh -c /var/lib/waagent/custom-script/#/script.sh
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 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"
}
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
Ş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"
}
İ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
İ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
Ş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 stdout
stderr
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 indirilmesiylefileUris
ilgilidir.
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 commandToExecute
geç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.