Azure Cloud Service için başlangıç görevlerini yapılandırma ve çalıştırma (klasik)

Önemli

Cloud Services (klasik) artık yeni müşteriler için kullanımdan kaldırılmıştır ve tüm müşteriler için 31 Ağustos 2024'te kullanımdan kaldırılacaktır. Yeni dağıtımlarda yeni Azure Resource Manager tabanlı dağıtım modeli Azure Cloud Services (genişletilmiş destek) kullanılmalıdır.

Bir rol başlamadan önce işlemleri gerçekleştirmek için başlangıç görevlerini kullanabilirsiniz. Gerçekleştirmek isteyebileceğiniz işlemler arasında bileşen yükleme, COM bileşenlerini kaydetme, kayıt defteri anahtarlarını ayarlama veya uzun süre çalışan bir işlem başlatma sayılabilir.

Not

Başlangıç görevleri Sanal Makineler için geçerli değildir, yalnızca Bulut Hizmeti Web ve Çalışan rolleri için geçerlidir.

Başlangıç görevleri nasıl çalışır?

Başlangıç görevleri, rolleriniz başlamadan önce gerçekleştirilir ve Başlangıç öğesi içindeki Görev öğesi kullanılarak ServiceDefinition.csdef dosyasında tanımlanır. Genellikle başlangıç görevleri toplu iş dosyalarıdır, ancak konsol uygulamaları veya PowerShell betiklerini başlatan toplu iş dosyaları da olabilir.

Ortam değişkenleri bilgileri bir başlangıç görevine geçirir ve yerel depolama bir başlangıç görevinden bilgi geçirmek için kullanılabilir. Örneğin, bir ortam değişkeni yüklemek istediğiniz programın yolunu belirtebilir ve dosyalar yerel depolama alanına yazılabilir ve daha sonra rolleriniz tarafından okunabilir.

Başlangıç göreviniz TEMP ortam değişkeni tarafından belirtilen dizinde bilgileri ve hataları günlüğe kaydedebilir. Başlangıç görevi sırasında TEMP ortam değişkeni C:\Resources\temp\[guid].[ olarak çözümlendi. bulutta çalışırken rolename]\RoleTemp dizini.

Başlangıç görevleri, yeniden başlatmalar arasında birçok defa da yürütülebilir. Örneğin, her rol döngüsünde başlangıç görevi çalıştırılır ve rol döngüleri her zaman yeniden başlatma içermeyebilir. Başlangıç görevleri, birkaç kez sorunsuz çalışmalarına olanak tanıyan bir şekilde yazılmalıdır.

Başlangıç işleminin tamamlanması için başlangıç görevlerinin sıfır hata düzeyli (veya çıkış kodu) ile bitmesi gerekir. Başlangıç görevi sıfır olmayan bir hatayla biterse rol başlatılmaz.

Rol başlatma sırası

Aşağıda Azure'da rol başlatma yordamı listelanmaktadır:

  1. Örnek Başlatılıyor olarak işaretlenir ve trafik almaz.

  2. Tüm başlangıç görevleri taskType özniteliğine göre yürütülür.

    • Basit görevler tek tek zaman uyumlu olarak yürütülür.

    • Arka plan ve ön plan görevleri, başlangıç görevine paralel olarak zaman uyumsuz olarak başlatılır.

      Uyarı

      IIS, başlangıç işlemindeki başlangıç görevi aşamasında tam olarak yapılandırılmamış olabilir, bu nedenle role özgü veriler kullanılamayabilir. Role özgü veriler gerektiren başlangıç görevleri Microsoft.WindowsAzure.ServiceRuntime.RoleEntryPoint.OnStart kullanmalıdır.

  3. Rol konağı işlemi başlatılır ve site IIS'de oluşturulur.

  4. Microsoft.WindowsAzure.ServiceRuntime.RoleEntryPoint.OnStart yöntemi çağrılır.

  5. Örnek Hazır olarak işaretlenir ve trafik örneğe yönlendirilir.

  6. Microsoft.WindowsAzure.ServiceRuntime.RoleEntryPoint.Run yöntemi çağrılır.

Başlangıç görevi örneği

Başlangıç görevleri, Görev öğesindeki ServiceDefinition.csdef dosyasında tanımlanır. commandLine özniteliği başlangıç toplu iş dosyasının veya konsol komutunun adını ve parametrelerini belirtir, executionContext özniteliği başlangıç görevinin ayrıcalık düzeyini ve taskType özniteliği görevin nasıl yürütüleceğini belirtir.

Bu örnekte, başlangıç görevi için MyVersionNumber adlı bir ortam değişkeni oluşturulur ve "1.0.0.0" değerine ayarlanır.

ServiceDefinition.csdef:

<Startup>
    <Task commandLine="Startup.cmd" executionContext="limited" taskType="simple" >
        <Environment>
            <Variable name="MyVersionNumber" value="1.0.0.0" />
        </Environment>
    </Task>
</Startup>

Aşağıdaki örnekte , Startup.cmd toplu iş dosyası TEMP ortam değişkeni tarafından belirtilen dizindeki StartupLog.txt dosyasına "Geçerli sürüm 1.0.0.0" satırını yazar. Satır, EXIT /B 0 başlangıç görevinin sıfır hata derecesiyle bitmesini sağlar.

ECHO The current version is %MyVersionNumber% >> "%TEMP%\StartupLog.txt" 2>&1
EXIT /B 0

Not

Visual Studio'da, başlangıç toplu iş dosyanızın Azure'daki projenize (Web rolleri için approot\bin ve çalışan rolleri için approot) düzgün dağıtıldığından emin olmak için başlangıç toplu iş dosyanızın Çıkış Dizinine Kopyala özelliği Her Zaman Kopyala olarak ayarlanmalıdır.

Görev özniteliklerinin açıklaması

Aşağıda, ServiceDefinition.csdef dosyasındaki Task öğesinin öznitelikleri açıklanmaktadır:

commandLine - Başlangıç görevi için komut satırını belirtir:

  • Başlangıç görevini başlatan isteğe bağlı komut satırı parametreleriyle komutu.
  • Bu genellikle bir .cmd veya .bat toplu iş dosyasının dosya adıdır.
  • Görev, dağıtımın AppRoot\Bin klasörüne göredir. Ortam değişkenleri görevin yolunu ve dosyasını belirlemede genişletilmemiştir. Ortam genişletmesi gerekiyorsa, başlangıç görevinizi çağıran küçük bir .cmd betiği oluşturabilirsiniz.
  • Bir konsol uygulaması veya PowerShell betiği başlatan bir toplu iş dosyası olabilir.

executionContext - Başlangıç görevi için ayrıcalık düzeyini belirtir. Ayrıcalık düzeyi sınırlı veya yükseltilmiş olabilir:

  • Sınırlı
    Başlangıç görevi, rolle aynı ayrıcalıklarla çalışır. Runtime öğesinin executionContext özniteliği de sınırlı olduğunda, kullanıcı ayrıcalıkları kullanılır.
  • Yükseltilmiş
    Başlangıç görevi yönetici ayrıcalıklarıyla çalışır. Bu, başlangıç görevlerinin rolün ayrıcalık düzeyini artırmadan programları yüklemesine, IIS yapılandırma değişiklikleri yapmasına, kayıt defteri değişikliklerini ve diğer yönetici düzeyinde görevler gerçekleştirmesine olanak tanır.

Not

Başlangıç görevinin ayrıcalık düzeyinin rolün kendisiyle aynı olması gerekmez.

taskType - Başlangıç görevinin yürütülürken kullanılaını belirtir.

  • Basit
    Görevler, ServiceDefinition.csdef dosyasında belirtilen sırayla birer birer zaman uyumlu olarak yürütülür. Basit bir başlangıç görevi sıfır hata düzeyli olarak sona erdiğinde, sonraki basit başlangıç görevi yürütülür. Yürütülecek başka basit başlangıç görevi yoksa, rolün kendisi başlatılır.

    Not

    Basit görev sıfır olmayan bir hatayla biterse örnek engellenir. Sonraki basit başlangıç görevleri ve rolün kendisi başlatılmaz.

    Toplu iş dosyanızın hata düzeyinde sıfırla bitmesini sağlamak için toplu iş dosyası işleminizin sonundaki komutu EXIT /B 0 yürütür.

  • background
    Görevler, rolün başlatılmasıyla paralel olarak zaman uyumsuz olarak yürütülür.

  • Ön plan
    Görevler, rolün başlatılmasıyla paralel olarak zaman uyumsuz olarak yürütülür. Ön plan ile arka plan görevi arasındaki temel fark, ön plan görevinin görev sona erene kadar rolün geri dönüştürülmesini veya kapatılmasını engellemesidir. Arka plan görevleri bu kısıtlamaya sahip değildir.

Ortam değişkenleri

Ortam değişkenleri, bilgileri başlangıç görevine geçirmenin bir yoludur. Örneğin, yüklenecek programı içeren bir blobun yolunu veya rolünüzün kullanacağı bağlantı noktası numaralarını ya da başlangıç görevinizin özelliklerini denetlemek için ayarları koyabilirsiniz.

Başlangıç görevleri için iki tür ortam değişkeni vardır; RoleEnvironment sınıfının üyelerini temel alan statik ortam değişkenleri ve ortam değişkenleri. Her ikisi de ServiceDefinition.csdef dosyasının Ortam bölümündedir ve her ikisi de Variable öğesi ve ad özniteliğini kullanır.

Statik ortam değişkenleri Değişken öğesinin değer özniteliğini kullanır. Yukarıdaki örnek, statik değeri "1.0.0.0" olan MyVersionNumber ortam değişkenini oluşturur. Başka bir örnek, StagingOrProduction ortam değişkeninin değerine göre farklı başlangıç eylemleri gerçekleştirmek için el ile "hazırlama" veya "üretim" değerlerine ayarlayabileceğiniz bir StagingOrProduction ortam değişkeni oluşturmaktır.

RoleEnvironment sınıfının üyelerini temel alan ortam değişkenleri Variable öğesinin value özniteliğini kullanmaz. Bunun yerine, uygun XPath öznitelik değerine sahip RoleInstanceValue alt öğesi, RoleEnvironment sınıfının belirli bir üyesini temel alan bir ortam değişkeni oluşturmak için kullanılır. Çeşitli RoleEnvironment değerlerine erişmek için XPath özniteliğinin değerleri burada bulunabilir.

Örneğin, örnek işlem öykünücüsunda çalışırken "true" ve bulutta çalışırken "false" olan bir ortam değişkeni oluşturmak için aşağıdaki Variable ve RoleInstanceValue öğelerini kullanın:

<Startup>
    <Task commandLine="Startup.cmd" executionContext="limited" taskType="simple">
        <Environment>

            <!-- Create the environment variable that informs the startup task whether it is running
                in the Compute Emulator or in the cloud. "%ComputeEmulatorRunning%"=="true" when
                running in the Compute Emulator, "%ComputeEmulatorRunning%"=="false" when running
                in the cloud. -->

            <Variable name="ComputeEmulatorRunning">
                <RoleInstanceValue xpath="/RoleEnvironment/Deployment/@emulated" />
            </Variable>

        </Environment>
    </Task>
</Startup>

Sonraki adımlar

Bulut Hizmetinizle bazı yaygın başlangıç görevlerini gerçekleştirmeyi öğrenin.

Bulut Hizmetinizi paketle.