Sdílet prostřednictvím


Konfigurace a spouštění úloh po spuštění pro cloudovou službu Azure (Classic)

Důležité

Od 1. září 2024 je služba Cloud Services (Classic) pro všechny zákazníky zastaralá. Microsoft zastaví a vypne všechna stávající spuštěná nasazení a data se od října 2024 trvale ztratí. Nová nasazení by měla používat nový model nasazení založený na Azure Resource Manageru na Azure Cloud Services (rozšířená podpora).

Úlohy po spuštění můžete použít k provádění operací před spuštěním role. Mezi operace, které můžete chtít provést, patří instalace komponenty, registrace komponent modelu COM (Component Object Model), nastavení klíčů registru nebo spuštění dlouhotrvajícího procesu.

Poznámka:

Spouštěcí úlohy se nevztahují na virtuální počítače, pouze na webové a pracovní role cloudových služeb.

Jak fungují úlohy po spuštění

Úlohy po spuštění jsou akce prováděné před zahájením vašich rolí. Soubor ServiceDefinition.csdef definuje spouštěcí úlohy pomocí elementu Task v elementu Startup . Úlohy spouštění jsou často dávkové soubory, ale mohou to být také konzolové aplikace nebo dávkové soubory, které spouští PowerShell skripty.

Proměnné prostředí předávají informace do spouštěcí úlohy a místní úložiště lze použít k předání informací ze spouštěcí úlohy. Proměnná prostředí může například zadat cestu k programu, který chcete nainstalovat, a soubory se dají zapsat do místního úložiště. Odsud můžou vaše role číst soubory.

Spouštěcí úloha může protokolovat informace a chyby do adresáře určeného proměnnou prostředí TEMP . Během spouštěcí úlohy se proměnná prostředí TEMP přeloží na adresář C:\Resources\temp\[guid].[rolename]\RoleTemp při běhu na cloudu.

Úlohy po spuštění je také možné provádět několikrát mezi restartováními. Spouštěcí úloha se například spustí pokaždé, když role recykluje, a recyklace rolí nemusí vždy zahrnovat restartování. Úlohy po spuštění by měly být napsány způsobem, který jim umožňuje spustit několikrát bez problémů.

Úlohy po spuštění musí končit úrovní chyby nula (nebo ukončovacím kódem nula), aby se proces spuštění dokončil. Pokud spouštěcí úkol končí nenulovou úrovní chyby, role se nespustí.

Pořadí spuštění role

V následujícím seznamu je uveden postup spuštění role v Azure:

  1. Instance je označena jako Počáteční a nepřijímá provoz.

  2. Všechny spouštěcí úlohy se spouští podle atributu taskType .

    • Jednoduché úlohy se provádějí synchronně, postupně po jednom.

    • Úlohy na pozadí a popředí se spouští asynchronně, paralelně s úlohou po spuštění.

      Varování

      Služba IIS nemusí být ve fázi spouštěcí úlohy v procesu spouštění plně nakonfigurována, takže údaje specifické pro roli nemusí být k dispozici. Spouštěcí úlohy, které vyžadují data specifická pro roli, by měly používat Microsoft.WindowsAzure.ServiceRuntime.RoleEntryPoint.OnStart.

  3. Proces hostitele role se spustí a web se vytvoří v Internetových informačních službách (IIS).

  4. Metoda Microsoft.WindowsAzure.ServiceRuntime.RoleEntryPoint.OnStart byla volána.

  5. Instance je označená jako Připraveno a provoz se směruje do instance.

  6. Volá se metoda Microsoft.WindowsAzure.ServiceRuntime.RoleEntryPoint.Run.

Příklad spouštěcí úlohy

Úlohy po spuštění jsou definovány v souboru ServiceDefinition.csdef v elementu Task . Atribut commandLine určuje název a parametry spouštěcího dávkového souboru nebo příkazu konzoly, atribut executionContext určuje úroveň oprávnění spouštěcí úlohy a atribut taskType určuje způsob provádění úlohy.

V tomto příkladu je pro spouštěcí úlohu vytvořena proměnná prostředí MyVersionNumber a nastavena na hodnotu 1.0.0.0.

ServiceDefinition.csdef:

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

V následujícím příkladu zapíše dávkový soubor Startup.cmd řádek "Aktuální verze je 1.0.0.0" do souboru StartupLog.txt v adresáři určeném proměnnou prostředí TEMP. Řádek EXIT /B 0 zajišťuje, že spouštěcí úkol končí s errorlevel nula.

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

Poznámka:

V sadě Visual Studio by měla být pro váš spouštěcí dávkový soubor nastavená vlastnost Kopírovat do výstupního adresáře na Kopírovat vždy, aby se zajistilo správné nasazení spouštěcího dávkového souboru do projektu v Azure (approot\bin pro webové role a approot pro pracovní role).

Popis atributů úloh

Následující část popisuje atributy elementu Task v souboru ServiceDefinition.csdef :

commandLine – Určuje příkazový řádek pro spouštěcí úlohu:

  • Příkaz s volitelnými parametry příkazového řádku, který zahájí spouštěcí úlohu.
  • Tento atribut je často název dávkového souboru s příponou .cmd nebo .bat.
  • Úloha se vztahuje k složce AppRoot\Bin pro nasazení. Proměnné prostředí nejsou rozšířené v procesu udávání cesty a souboru úlohy. Pokud je potřeba rozšíření prostředí, můžete vytvořit malý .cmd skript, který volá spouštěcí úlohu.
  • Může to být konzolová aplikace nebo dávkový soubor, který spouští skript PowerShellu.

executionContext – Určuje úroveň oprávnění pro spouštěcí úlohu. Úroveň oprávnění může být omezená nebo zvýšená:

  • omezený
    Spouštěcí úloha se spustí se stejnými oprávněními jako role. Pokud je atribut executionContext pro prvek runtime také omezen, pak se použijí uživatelská oprávnění.
  • zvýšený
    Spouštěcí úloha se spustí s oprávněními správce. Tato oprávnění umožňují úlohám po spuštění instalovat programy, provádět změny konfigurace služby IIS, provádět změny registru a další úlohy na úrovni správce, aniž by se zvýšila úroveň oprávnění samotné role.

Poznámka:

Úroveň oprávnění spouštěcí úlohy nemusí být stejná jako samotná role.

taskType – Určuje způsob spuštění úkolu.

  • jednoduchý
    Úlohy se spouští synchronně po jednom v pořadí uvedeném v souboru ServiceDefinition.csdef . Když jeden jednoduchý spouštěcí úkol skončí s chybovou úrovní nula, provede se další jednoduchá spouštěcí úloha. Pokud neexistují žádné jednoduché spouštěcí úlohy, spustí se samotná role.

    Poznámka:

    Pokud jednoduchý úkol končí nenulovou chybovou úrovní, bude instance blokována. Následující jednoduché spouštěcí úlohy ani samotná role se nespustí.

    Pokud chcete zajistit, aby dávkový soubor skončil s chybovou úrovní nuly, spusťte příkaz EXIT /B 0 na konci procesu dávkového souboru.

  • pozadí
    Úlohy se spouští asynchronně, paralelně se spuštěním role.

  • popředí
    Úlohy se spouští asynchronně, paralelně se spuštěním role. Klíčovým rozdílem mezi úlohou popředí a úlohou na pozadí je to, že úloha popředí brání roli v recyklaci nebo vypnutí, dokud úloha neskončí. Úlohy na pozadí toto omezení nemají.

Proměnné prostředí

Proměnné prostředí představují způsob, jak předat informace spouštěcí úloze. Můžete například umístit cestu k objektu blob, který obsahuje program k instalaci, nebo čísla portů, která vaše role používá, nebo nastavení pro řízení funkcí spouštěcí úlohy.

Existují dva druhy proměnných prostředí pro úlohy po spuštění; statické proměnné prostředí a proměnné prostředí založené na členech třídy RoleEnvironment . Oba jsou v části Prostředí souboru ServiceDefinition.csdef a oba používají variable element a name atribut.

Statické proměnné prostředí používají atribut value elementu Variable. Předchozí příklad vytvoří proměnnou prostředí MyVersionNumber , která má statickou hodnotu 1.0.0.0. Dalším příkladem by bylo vytvoření proměnné prostředí StagingOrProduction , kterou můžete ručně nastavit na hodnoty "přípravného" nebo "produkčního" pro provádění různých spouštěcích akcí na základě hodnoty proměnné prostředí StagingOrProduction .

Proměnné prostředí založené na členech třídy RoleEnvironment nepoužívají atribut valueelementu Variable. Místo toho se podřízený prvek RoleInstanceValue s odpovídající hodnotou atributu XPath používá k vytvoření proměnné prostředí na základě konkrétního člena třídy RoleEnvironment. Hodnoty atributu XPath pro přístup k různým hodnotám RoleEnvironment najdete zde.

Například chcete-li vytvořit proměnnou prostředí, která je "true", když instance běží v emulátoru výpočetních operací, a "false", když běží v cloudu, použijte následující prvek proměnná a RoleInstanceValue.

<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>

Další kroky

Naučte se s cloudovou službou provádět některé běžné úlohy po spuštění.

Zabalte svou cloudovou službu.