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

Důležité

Cloud Services (classic) je teď pro nové zákazníky zastaralé a 31. srpna 2024 bude vyřazeno pro všechny zákazníky. Nová nasazení by měla používat nový model nasazení založený na Azure Resource Manager 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, nastavení klíčů registru nebo spuštění dlouhotrvajícího procesu.

Poznámka

Úlohy po spuštění se nevztahují na Virtual Machines, pouze na webové role a role pracovního procesu cloudové služby.

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

Úlohy po spuštění jsou akce, které se provádějí před zahájením rolí a jsou definovány v souboru ServiceDefinition.csdef pomocí elementu Task v elementu Startup . Úlohy spouštění jsou často 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ávání informací ze spouštěcí úlohy. Proměnná prostředí může například určit cestu k programu, který chcete nainstalovat, a soubory se dají zapisovat do místního úložiště, které pak můžou vaše role číst později.

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]\Adresář RoleTemp 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. Úlohu po spuštění je například možné spustit při každé recyklaci role a ty nemusí vždy zahrnovat restartování. Úlohy po spuštění by měly být napsané způsobem, který jim umožní spustit několikrát bez problémů.

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

Pořadí spuštění role

Následující seznam uvádí postup spuštění role v Azure:

  1. Instance je označená jako spuštěná a nepřijímá provoz.

  2. Všechny úlohy po spuštění se spouštějí podle atributu taskType .

    • Jednoduché úlohy se provádějí synchronně, jeden po druhém.

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

      Upozornění

      Služba IIS nemusí být plně nakonfigurovaná během spouštěcí fáze úlohy v procesu spouštění, takže nemusí být k dispozici data specifická pro roli. Úlohy po spuštění, 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ří ve službě IIS.

  4. Je volána metoda Microsoft.WindowsAzure.ServiceRuntime.RoleEntryPoint.OnStart .

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

  6. Je volána metoda Microsoft.WindowsAzure.ServiceRuntime.RoleEntryPoint.Run .

Příklad úlohy po spuštění

Ú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, jak bude úloha spuštěna.

V tomto příkladu se pro spouštěcí úlohu vytvoří proměnná prostředí MyVersionNumber a nastaví se 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 StartupLog.txt souboru v adresáři určeném proměnnou prostředí TEMP. Řádek EXIT /B 0 zajistí, že úloha po spuštění skončí na úrovni chyby 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 vlastnost Kopírovat do výstupního adresáře pro spouštěcí dávkový soubor nastavená na Kopírovat Vždy , abyste měli jistotu, že je spouštěcí dávkový soubor správně nasazený do projektu v Azure (approot\bin pro webové role a approot pro role pracovního procesu).

Popis atributů úloh

Následující popis atributů 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.
  • Často se jedná o název souboru .cmd nebo .bat dávkového souboru.
  • Úloha je relativní ke složce AppRoot\Bin pro nasazení. Proměnné prostředí nejsou při určování cesty a souboru úkolu rozbalené. Pokud se vyžaduje rozšíření prostředí, můžete vytvořit malý skript .cmd, 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é
    Úloha po spuštění se spouští se stejnými oprávněními jako role. Pokud je atribut executionContext pro element Runtime také omezen, pak se použijí uživatelská oprávnění.
  • Zvýšené
    Spouštěcí úloha se spouští s oprávněními správce. Úlohy po spuštění tak mohou 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í úlohy.

  • Jednoduché
    Úlohy se spouštějí synchronně, jeden po druhém, v pořadí zadaném v souboru ServiceDefinition.csdef . Když jeden jednoduchý spouštěcí úkol končí chybovou úrovní nula, spustí se další jednoduchá spouštěcí úloha. Pokud nejsou k dispozici žádné další jednoduché úlohy spuštění, pak se spustí samotná role.

    Poznámka

    Pokud jednoduchá úloha končí nenulovou úrovní chyb, instance se zablokuje. Následné jednoduché spouštěcí úlohy a samotná role se nespustí.

    Pokud chcete zajistit, že váš dávkový soubor končí chybovou úrovní nula, spusťte příkaz EXIT /B 0 na konci procesu dávkového souboru.

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

  • Popředí
    Úlohy se spouštějí asynchronně, paralelně se spuštěním role. Hlavní rozdíl mezi úlohou popředí a úlohou na pozadí spočívá v tom, že úkol na popředí brání recyklaci nebo vypnutí role, dokud úkol neskončil. Ú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 vložit cestu k objektu blob, který obsahuje program k instalaci, čísla portů, které bude vaše role používat, 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 RoleEnvironment třídy. Obě jsou v části Prostředí v souboru ServiceDefinition.csdef a oba používají element Variable a atribut name .

Statické proměnné prostředí používají atribut value elementu Variable . Výše uvedený příklad vytvoří proměnnou prostředí MyVersionNumber , která má statickou hodnotu "1.0.0.0". Dalším příkladem je vytvoření proměnné prostředí StagingOrProduction , kterou můžete ručně nastavit na hodnoty "staging" nebo "production" a provádět různé akce spuštění na základě hodnoty proměnné prostředí StagingOrProduction .

Proměnné prostředí založené na členech RoleEnvironment třídy nepoužívají atribut valueelementu Variable . Místo toho , RoleInstanceValue podřízený prvek, s odpovídající XPath atribut hodnota, jsou použity k vytvoření proměnné prostředí založené na konkrétním členu RoleEnvironment třídy. Hodnoty atributu XPath pro přístup k různým hodnotám RoleEnvironment najdete tady.

Pokud například chcete vytvořit proměnnou prostředí, která má hodnotu true, když je instance spuštěná ve výpočetním emulátoru, a "false" při spuštění v cloudu, použijte následující elementy Variable 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

Zjistěte, jak s cloudovou službou provádět některé běžné úlohy při spuštění .

Zabalte cloudovou službu.