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:

Úlohy po spuštění se nevztahují na virtuální počítače, pouze pro webové role a role pracovního procesu cloudové služby.

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 dávkové soubory, ale můžou to být také konzolové aplikace nebo dávkové soubory, které spouští skripty PowerShellu.

Proměnné prostředí předávají informace do spouštěcí úlohy a místní úložiště je možné použít k předání informací z úlohy po spuštění. 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 C:\Resources\temp\[guid].[ rolename]\RoleTemp directory při spuštění v 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 chybovou úrovní (nebo ukončovacím kódem) nuly, 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í.

      Upozorňující

      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. Spustí se proces hostitele role a web se vytvoří v Internetová informační služba (IIS).

  4. Volá se metoda Microsoft.WindowsAzure.ServiceRuntime.RoleEntryPoint.OnStart .

  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čí chybovou úrovní nuly.

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 vlastnost Kopírovat do výstupního adresáře spouštěcího dávkového souboru nastavená na možnost 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 role pracovního procesu).

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 souboru .cmd nebo .bat dávkového souboru.
  • Úloha je relativní vzhledem ke složce AppRoot\Bin pro nasazení. Proměnné prostředí nejsou rozbalené při určová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 nejsou k dispozici žádné jednoduché spouštěcí úlohy ke spuštění, spustí se samotná role.

    Poznámka:

    Pokud jednoduchý úkol končí nenulovou chybovou úrovní, bude instance blokována. Další jednoduché spouštěcí úlohy a 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 popředím a úlohou na pozadí je to, že úloha popředí brání roli v recyklaci nebo vypnutí, dokud úkol nekončí. Ú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 RoleEnvironment třídy nepoužívají atribut value elementu Variable . Místo toho RoleInstanceValue podřízený prvek s odpovídající hodnotou atributu XPath se používá k vytvoření proměnné prostředí na základě konkrétního členu RoleEnvironment třídy. Hodnoty atributu XPath pro přístup k různým hodnotám RoleEnvironment najdete zde.

Pokud například chcete vytvořit proměnnou prostředí, která je true, když instance běží v emulátoru výpočetních prostředků, a "false" při spuštění v cloudu, použijte následující proměnné a elementy 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 cloudovou službu.