Úlohy spuštění Common Cloud Service (Classic)

Důležité

Cloud Services (classic) je teď pro nové zákazníky zastaralý a bude vyřazen 31. srpna 2024 pro všechny zákazníky. Nová nasazení by měla používat nový model nasazení Azure Resource Manager založený na Azure Cloud Services (rozšířená podpora).

Tento článek obsahuje několik příkladů běžných úloh při spuštění, které můžete chtít provádět v cloudové službě. Ú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.

V tomto článku se dozvíte, jak fungují úlohy po spuštění a jak konkrétně vytvořit položky, které definují spouštěcí úlohu.

Poznámka

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

Definování proměnných prostředí před spuštěním role

Pokud potřebujete definovat proměnné prostředí pro konkrétní úlohu, použijte element Environment uvnitř elementu Task .

<ServiceDefinition name="MyService" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition">
    <WorkerRole name="WorkerRole1">
        ...
        <Startup>
            <Task commandLine="Startup.cmd" executionContext="limited" taskType="simple">
                <Environment>
                    <Variable name="MyEnvironmentVariable" value="MyVariableValue" />
                </Environment>
            </Task>
        </Startup>
    </WorkerRole>
</ServiceDefinition>

Proměnné můžou také použít platnou hodnotu Azure XPath , která odkazuje na něco o nasazení. Místo použití atributu value definujte RoleInstanceValue podřízeného elementu.

<Variable name="PathToStartupStorage">
    <RoleInstanceValue xpath="/RoleEnvironment/CurrentInstance/LocalResources/LocalResource[@name='StartupLocalStorage']/@path" />
</Variable>

Konfigurace spuštění služby IIS pomocí AppCmd.exe

Nástroj AppCmd.exe příkazového řádku se dá použít ke správě nastavení služby IIS při spuštění v Azure. AppCmd.exe poskytuje pohodlný přístup z příkazového řádku k nastavení konfigurace pro použití v úlohách po spuštění v Azure. Pomocí AppCmd.exemůžete přidávat, upravovat nebo odebírat nastavení webu pro aplikace a weby.

Při použití AppCmd.exe jako spouštěcí úlohy je ale potřeba dávat pozor na několik věcí:

  • Úlohy po spuštění je možné mezi restartováními spouštět více než jednou. Například když se role recykluje.
  • Pokud se akceAppCmd.exe provede více než jednou, může vygenerovat chybu. Například pokus o přidání oddílu do Web.config dvakrát by mohl vygenerovat chybu.
  • Úlohy po spuštění selžou, pokud vrátí nenulový ukončovací kód nebo úroveň chyby. Například při AppCmd.exe vygeneruje chybu.

Po volání AppCmd.exeje vhodné zkontrolovat úroveň chyby, což je snadné, pokud zabalíte volání AppCmd.exe souborem .cmd. Pokud zjistíte známou odpověď na úrovni chyby , můžete ji ignorovat nebo ji předat zpět.

Úroveň chyby vrácená AppCmd.exe jsou uvedeny v souboru winerror.h a lze ji také zobrazit na webu MSDN.

Příklad správy úrovně chyb

V tomto příkladu se do souboruWeb.config přidá oddíl komprese a položka komprese pro JSON se zpracováním chyb a protokolováním.

Tady jsou uvedené příslušné části souboru ServiceDefinition.csdef , které zahrnují nastavení atributu executionContext na , elevated aby AppCmd.exe dostatečná oprávnění ke změně nastavení v souboruWeb.config :

<ServiceDefinition name="MyService" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition">
    <WorkerRole name="WorkerRole1">
        ...
        <Startup>
            <Task commandLine="Startup.cmd" executionContext="elevated" taskType="simple" />
        </Startup>
    </WorkerRole>
</ServiceDefinition>

Dávkový soubor Startup.cmd používá AppCmd.exe k přidání oddílu komprese a položky komprese json do souboruWeb.config . Očekávaná úroveň chyby 183 je nastavená na nulu pomocí VERIFY.EXE programu příkazového řádku. Do StartupErrorLog.txt se protokolují neočekávané úrovně chyb.

REM   *** Add a compression section to the Web.config file. ***
%windir%\system32\inetsrv\appcmd set config /section:urlCompression /doDynamicCompression:True /commit:apphost >> "%TEMP%\StartupLog.txt" 2>&1

REM   ERRORLEVEL 183 occurs when trying to add a section that already exists. This error is expected if this
REM   batch file were executed twice. This can occur and must be accounted for in an Azure startup
REM   task. To handle this situation, set the ERRORLEVEL to zero by using the Verify command. The Verify
REM   command will safely set the ERRORLEVEL to zero.
IF %ERRORLEVEL% EQU 183 VERIFY > NUL

REM   If the ERRORLEVEL is not zero at this point, some other error occurred.
IF %ERRORLEVEL% NEQ 0 (
    ECHO Error adding a compression section to the Web.config file. >> "%TEMP%\StartupLog.txt" 2>&1
    GOTO ErrorExit
)

REM   *** Add compression for json. ***
%windir%\system32\inetsrv\appcmd set config  -section:system.webServer/httpCompression /+"dynamicTypes.[mimeType='application/json; charset=utf-8',enabled='True']" /commit:apphost >> "%TEMP%\StartupLog.txt" 2>&1
IF %ERRORLEVEL% EQU 183 VERIFY > NUL
IF %ERRORLEVEL% NEQ 0 (
    ECHO Error adding the JSON compression type to the Web.config file. >> "%TEMP%\StartupLog.txt" 2>&1
    GOTO ErrorExit
)

REM   *** Exit batch file. ***
EXIT /b 0

REM   *** Log error and exit ***
:ErrorExit
REM   Report the date, time, and ERRORLEVEL of the error.
DATE /T >> "%TEMP%\StartupLog.txt" 2>&1
TIME /T >> "%TEMP%\StartupLog.txt" 2>&1
ECHO An error occurred during startup. ERRORLEVEL = %ERRORLEVEL% >> "%TEMP%\StartupLog.txt" 2>&1
EXIT %ERRORLEVEL%

Přidání pravidel brány firewall

V Azure jsou v podstatě dvě brány firewall. První brána firewall řídí připojení mezi virtuálním počítačem a vnějším světem. Tuto bránu firewall řídí element EndPoints v souboru ServiceDefinition.csdef .

Druhá brána firewall řídí připojení mezi virtuálním počítačem a procesy v rámci daného virtuálního počítače. Tuto bránu firewall lze ovládat nástrojem příkazového netsh advfirewall firewall řádku.

Azure vytváří pravidla brány firewall pro procesy spuštěné v rámci vašich rolí. Když například spustíte službu nebo program, Azure automaticky vytvoří nezbytná pravidla brány firewall, která této službě umožní komunikovat s internetem. Pokud ale vytvoříte službu, kterou spouští proces mimo vaši roli (například služba modelu COM+ nebo naplánovaná úloha Windows), budete muset ručně vytvořit pravidlo brány firewall, které povolí přístup k této službě. Tato pravidla brány firewall je možné vytvořit pomocí spouštěcí úlohy.

Úloha po spuštění, která vytváří pravidlo brány firewall, musí mít hodnotu executionContextse zvýšenými oprávněními. Do souboru ServiceDefinition.csdef přidejte následující úlohu po spuštění.

<ServiceDefinition name="MyService" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition">
    <WorkerRole name="WorkerRole1">
        ...
        <Startup>
            <Task commandLine="AddFirewallRules.cmd" executionContext="elevated" taskType="simple" />
        </Startup>
    </WorkerRole>
</ServiceDefinition>

Pokud chcete přidat pravidlo brány firewall, musíte použít příslušné netsh advfirewall firewall příkazy v spouštěcím dávkovém souboru. V tomto příkladu úloha po spuštění vyžaduje zabezpečení a šifrování pro port TCP 80.

REM   Add a firewall rule in a startup task.

REM   Add an inbound rule requiring security and encryption for TCP port 80 traffic.
netsh advfirewall firewall add rule name="Require Encryption for Inbound TCP/80" protocol=TCP dir=in localport=80 security=authdynenc action=allow >> "%TEMP%\StartupLog.txt" 2>&1

REM   If an error occurred, return the errorlevel.
EXIT /B %errorlevel%

Blokování konkrétní IP adresy

Přístup webové role Azure k sadě zadaných IP adres můžete omezit úpravou souboru web.config služby IIS. Musíte také použít příkazový soubor, který odemkne část ipSecurity souboruApplicationHost.config .

Pokud chcete odemknout část ipSecurityApplicationHost.config souboru, vytvořte soubor příkazu, který se spustí při spuštění role. Vytvořte složku na kořenové úrovni webové role s názvem po spuštění a v této složce vytvořte dávkový soubor s názvem startup.cmd. Přidejte tento soubor do projektu sady Visual Studio a nastavte vlastnosti na Kopírovat vždy , abyste měli jistotu, že je součástí vašeho balíčku.

Do souboru ServiceDefinition.csdef přidejte následující úlohu po spuštění.

<ServiceDefinition name="MyService" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition">
    <WebRole name="WebRole1">
        ...
        <Startup>
            <Task commandLine="startup.cmd" executionContext="elevated" />
        </Startup>
    </WebRole>
</ServiceDefinition>

Do souboru startup.cmd přidejte tento příkaz:

@echo off
@echo Installing "IPv4 Address and Domain Restrictions" feature 
powershell -ExecutionPolicy Unrestricted -command "Install-WindowsFeature Web-IP-Security"
@echo Unlocking configuration for "IPv4 Address and Domain Restrictions" feature 
%windir%\system32\inetsrv\AppCmd.exe unlock config -section:system.webServer/security/ipSecurity

Tato úloha způsobí, že se dávkový soubor startup.cmd spustí při každé inicializaci webové role a zajistí odemknutí požadovaného oddílu ipSecurity .

Nakonec upravte část system.webServer souboruweb.config vaší webové role a přidejte seznam IP adres, kterým je udělen přístup, jak je znázorněno v následujícím příkladu:

Tato ukázková konfigurace umožňuje všem IP adresám přístup k serveru s výjimkou dvou definovaných

<system.webServer>
    <security>
    <!--Unlisted IP addresses are granted access-->
    <ipSecurity>
        <!--The following IP addresses are denied access-->
        <add allowed="false" ipAddress="192.168.100.1" subnetMask="255.255.0.0" />
        <add allowed="false" ipAddress="192.168.100.2" subnetMask="255.255.0.0" />
    </ipSecurity>
    </security>
</system.webServer>

Tato ukázková konfigurace odepře všem IP adresám přístup k serveru s výjimkou dvou definovaných.

<system.webServer>
    <security>
    <!--Unlisted IP addresses are denied access-->
    <ipSecurity allowUnlisted="false">
        <!--The following IP addresses are granted access-->
        <add allowed="true" ipAddress="192.168.100.1" subnetMask="255.255.0.0" />
        <add allowed="true" ipAddress="192.168.100.2" subnetMask="255.255.0.0" />
    </ipSecurity>
    </security>
</system.webServer>

Vytvoření spouštěcí úlohy PowerShellu

Windows PowerShell skripty nelze volat přímo ze souboru ServiceDefinition.csdef, ale lze je vyvolat ze spouštěcího dávkového souboru.

PowerShell (ve výchozím nastavení) nespouští nepodepsané skripty. Pokud skript nepodepíšete, musíte nakonfigurovat PowerShell tak, aby spouštěl nepodepsané skripty. Pokud chcete spouštět nepodepsané skripty, musí být ExecutionPolicynastavená na hodnotu Unrestricted. Nastavení ExecutionPolicy, které použijete, vychází z verze Windows PowerShell.

REM   Run an unsigned PowerShell script and log the output
PowerShell -ExecutionPolicy Unrestricted .\startup.ps1 >> "%TEMP%\StartupLog.txt" 2>&1

REM   If an error occurred, return the errorlevel.
EXIT /B %errorlevel%

Pokud používáte hostovaný operační systém s PowerShellem 2.0 nebo 1.0, můžete vynutit spuštění verze 2, a pokud není k dispozici, použijte verzi 1.

REM   Attempt to set the execution policy by using PowerShell version 2.0 syntax.
PowerShell -Version 2.0 -ExecutionPolicy Unrestricted .\startup.ps1 >> "%TEMP%\StartupLog.txt" 2>&1

REM   If PowerShell version 2.0 isn't available. Set the execution policy by using the PowerShell
IF %ERRORLEVEL% EQU -393216 (
   PowerShell -Command "Set-ExecutionPolicy Unrestricted" >> "%TEMP%\StartupLog.txt" 2>&1
   PowerShell .\startup.ps1 >> "%TEMP%\StartupLog.txt" 2>&1
)

REM   If an error occurred, return the errorlevel.
EXIT /B %errorlevel%

Vytvoření souborů v místním úložišti z úlohy po spuštění

Místní prostředek úložiště můžete použít k ukládání souborů vytvořených úlohou po spuštění, ke kterým později bude vaše aplikace přistupovat.

Pokud chcete vytvořit prostředek místního úložiště, přidejte do souboru ServiceDefinition.csdef oddíl LocalResources a pak přidejte podřízený element LocalStorage. Dejte prostředku místního úložiště jedinečný název a odpovídající velikost pro spouštěcí úlohu.

Pokud chcete ve spouštěcí úloze použít místní prostředek úložiště, musíte vytvořit proměnnou prostředí, která bude odkazovat na umístění místních prostředků úložiště. Spouštěcí úloha a aplikace pak můžou číst a zapisovat soubory do místního prostředku úložiště.

Příslušné části souboru ServiceDefinition.csdef jsou uvedené tady:

<ServiceDefinition name="MyService" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition">
  <WorkerRole name="WorkerRole1">
    ...

    <LocalResources>
      <LocalStorage name="StartupLocalStorage" sizeInMB="5"/>
    </LocalResources>

    <Startup>
      <Task commandLine="Startup.cmd" executionContext="limited" taskType="simple">
        <Environment>
          <Variable name="PathToStartupStorage">
            <RoleInstanceValue xpath="/RoleEnvironment/CurrentInstance/LocalResources/LocalResource[@name='StartupLocalStorage']/@path" />
          </Variable>
        </Environment>
      </Task>
    </Startup>
  </WorkerRole>
</ServiceDefinition>

Například tento dávkový soubor Startup.cmd používá proměnnou prostředí PathToStartupStorage k vytvoření souboru MyTest.txt v umístění místního úložiště.

REM   Create a simple text file.

ECHO This text will go into the MyTest.txt file which will be in the    >  "%PathToStartupStorage%\MyTest.txt"
ECHO path pointed to by the PathToStartupStorage environment variable.  >> "%PathToStartupStorage%\MyTest.txt"
ECHO The contents of the PathToStartupStorage environment variable is   >> "%PathToStartupStorage%\MyTest.txt"
ECHO "%PathToStartupStorage%".                                          >> "%PathToStartupStorage%\MyTest.txt"

REM   Exit the batch file with ERRORLEVEL 0.

EXIT /b 0

K místní složce úložiště můžete přistupovat ze sady Azure SDK pomocí metody GetLocalResource .

string localStoragePath = Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironment.GetLocalResource("StartupLocalStorage").RootPath;

string fileContent = System.IO.File.ReadAllText(System.IO.Path.Combine(localStoragePath, "MyTestFile.txt"));

Spuštění v emulátoru nebo cloudu

Spouštěcí úloha může provádět různé kroky, když funguje v cloudu, než když je v emulátoru výpočetních prostředků. Můžete například chtít použít novou kopii dat SQL pouze při spuštění v emulátoru. Nebo můžete chtít provést některé optimalizace výkonu pro cloud, které nemusíte provádět při spuštění v emulátoru.

Tuto schopnost provádět různé akce s emulátorem výpočetních prostředků a cloudem můžete dosáhnout vytvořením proměnné prostředí v souboru ServiceDefinition.csdef . Potom otestujete tuto proměnnou prostředí pro hodnotu ve spouštěcí úloze.

Pokud chcete vytvořit proměnnou prostředí, přidejte element Variable/RoleInstanceValue a vytvořte hodnotu XPath ./RoleEnvironment/Deployment/@emulated Hodnota proměnné prostředí %ComputeEmulatorRunning% je true při spuštění v emulátoru výpočetních prostředků a false při spuštění v cloudu.

<ServiceDefinition name="MyService" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition">
  <WorkerRole name="WorkerRole1">

    ...

    <Startup>
      <Task commandLine="Startup.cmd" executionContext="limited" taskType="simple">
        <Environment>
          <Variable name="ComputeEmulatorRunning">
            <RoleInstanceValue xpath="/RoleEnvironment/Deployment/@emulated" />
          </Variable>
        </Environment>
      </Task>
    </Startup>

  </WorkerRole>
</ServiceDefinition>

Úloha teď může zkontrolovat proměnnou prostředí %ComputeEmulatorRunning% a provádět různé akce v závislosti na tom, jestli role běží v cloudu nebo v emulátoru. Tady je skript prostředí .cmd, který kontroluje danou proměnnou prostředí.

REM   Check if this task is running on the compute emulator.

IF "%ComputeEmulatorRunning%" == "true" (
    REM   This task is running on the compute emulator. Perform tasks that must be run only in the compute emulator.
) ELSE (
    REM   This task is running on the cloud. Perform tasks that must be run only in the cloud.
)

Zjištění, že se úloha už spustila

Role se může recyklovat bez restartování, což způsobí opětovné spuštění úloh po spuštění. Neexistuje žádný příznak, který by indikoval, že úloha už na hostitelském virtuálním počítači byla spuštěna. Můžete mít některé úkoly, u kterých nezáleží na tom, že se spouštějí vícekrát. Můžete však narazit na situaci, kdy potřebujete zabránit spuštění úlohy více než jednou.

Nejjednodušším způsobem, jak zjistit, že úloha už byla spuštěna, je vytvořit soubor ve složce %TEMP% , když je úkol úspěšný, a vyhledat ho na začátku úkolu. Tady je ukázkový skript příkazového prostředí, který to udělá za vás.

REM   If Task1_Success.txt exists, then Application 1 is already installed.
IF EXIST "%PathToApp1Install%\Task1_Success.txt" (
  ECHO Application 1 is already installed. Exiting. >> "%TEMP%\StartupLog.txt" 2>&1
  GOTO Finish
)

REM   Run your real exe task
ECHO Running XYZ >> "%TEMP%\StartupLog.txt" 2>&1
"%PathToApp1Install%\setup.exe" >> "%TEMP%\StartupLog.txt" 2>&1

IF %ERRORLEVEL% EQU 0 (
  REM   The application installed without error. Create a file to indicate that the task
  REM   does not need to be run again.

  ECHO This line will create a file to indicate that Application 1 installed correctly. > "%PathToApp1Install%\Task1_Success.txt"

) ELSE (
  REM   An error occurred. Log the error and exit with the error code.

  DATE /T >> "%TEMP%\StartupLog.txt" 2>&1
  TIME /T >> "%TEMP%\StartupLog.txt" 2>&1
  ECHO  An error occurred running task 1. Errorlevel = %ERRORLEVEL%. >> "%TEMP%\StartupLog.txt" 2>&1

  EXIT %ERRORLEVEL%
)

:Finish

REM   Exit normally.
EXIT /B 0

Osvědčené postupy pro úlohy

Tady je několik osvědčených postupů, které byste měli dodržovat při konfiguraci úlohy pro webovou roli nebo roli pracovního procesu.

Vždy protokolovat aktivity spuštění

Visual Studio neposkytuje ladicí program pro krokování dávkových souborů, takže je dobré získat co nejvíce dat o provozu dávkových souborů. Protokolování výstupu dávkových souborů, stdout i stderr, vám může poskytnout důležité informace při pokusu o ladění a opravu dávkových souborů. Pokud chcete protokolovat stdout i stderr do souboru StartupLog.txt v adresáři, na který odkazuje proměnná prostředí %TEMP% , přidejte text >> "%TEMP%\\StartupLog.txt" 2>&1 na konec konkrétních řádků, které chcete protokolovat. Pokud chcete například spustit setup.exe v adresáři %PathToApp1Install% : "%PathToApp1Install%\setup.exe" >> "%TEMP%\StartupLog.txt" 2>&1

Pro zjednodušení xml můžete vytvořit soubor cmd obálky, který volá všechny spouštěcí úlohy spolu s protokolováním a zajistí, aby každý podřízený úkol sdílí stejné proměnné prostředí.

Možná zjistíte, že je otravné použít >> "%TEMP%\StartupLog.txt" 2>&1 na konci každého spouštěcího úkolu. Protokolování úloh můžete vynutit vytvořením obálky, která za vás zpracovává protokolování. Tato obálka volá skutečný dávkový soubor, který chcete spustit. Veškerý výstup z cílového dávkového souboru se přesměruje do souboruStartuplog.txt .

Následující příklad ukazuje, jak přesměrovat veškerý výstup ze spouštěcího dávkového souboru. V tomto příkladu soubor ServerDefinition.csdef vytvoří spouštěcí úlohu, která volá logwrap.cmd. logwrap.cmd volá Startup2.cmd a přesměruje veškerý výstup na %TEMP%\StartupLog.txt.

ServiceDefinition.cmd:

<Startup>
    <Task commandLine="logwrap.cmd startup2.cmd" executionContext="limited" taskType="simple" />
</Startup>

logwrap.cmd:

@ECHO OFF

REM   logwrap.cmd calls passed in batch file, redirecting all output to the StartupLog.txt log file.

ECHO [%date% %time%] == START logwrap.cmd ============================================== >> "%TEMP%\StartupLog.txt" 2>&1
ECHO [%date% %time%] Running %1 >> "%TEMP%\StartupLog.txt" 2>&1

REM   Call the child command batch file, redirecting all output to the StartupLog.txt log file.
START /B /WAIT %1 >> "%TEMP%\StartupLog.txt" 2>&1

REM   Log the completion of child command.
ECHO [%date% %time%] Done >> "%TEMP%\StartupLog.txt" 2>&1

IF %ERRORLEVEL% EQU 0 (

   REM   No errors occurred. Exit logwrap.cmd normally.
   ECHO [%date% %time%] == END logwrap.cmd ================================================ >> "%TEMP%\StartupLog.txt" 2>&1
   ECHO.  >> "%TEMP%\StartupLog.txt" 2>&1
   EXIT /B 0

) ELSE (

   REM   Log the error.
   ECHO [%date% %time%] An error occurred. The ERRORLEVEL = %ERRORLEVEL%.  >> "%TEMP%\StartupLog.txt" 2>&1
   ECHO [%date% %time%] == END logwrap.cmd ================================================ >> "%TEMP%\StartupLog.txt" 2>&1
   ECHO.  >> "%TEMP%\StartupLog.txt" 2>&1
   EXIT /B %ERRORLEVEL%

)

Startup2.cmd:

@ECHO OFF

REM   This is the batch file where the startup steps should be performed. Because of the
REM   way Startup2.cmd was called, all commands and their outputs will be stored in the
REM   StartupLog.txt file in the directory pointed to by the TEMP environment variable.

REM   If an error occurs, the following command will pass the ERRORLEVEL back to the
REM   calling batch file.

ECHO [%date% %time%] Some log information about this task
ECHO [%date% %time%] Some more log information about this task

EXIT %ERRORLEVEL%

Ukázkový výstup v souboruStartupLog.txt :

[Mon 10/17/2016 20:24:46.75] == START logwrap.cmd ============================================== 
[Mon 10/17/2016 20:24:46.75] Running command1.cmd 
[Mon 10/17/2016 20:24:46.77] Some log information about this task
[Mon 10/17/2016 20:24:46.77] Some more log information about this task
[Mon 10/17/2016 20:24:46.77] Done 
[Mon 10/17/2016 20:24:46.77] == END logwrap.cmd ================================================ 

Tip

Soubor StartupLog.txt se nachází ve složce C:\Resources\temp\{identifikátor role}\RoleTemp .

Vhodné nastavení executionContextu pro úlohy po spuštění

Nastavte oprávnění odpovídajícím způsobem pro spouštěcí úlohu. Někdy se spouštěcí úlohy musí spouštět se zvýšenými oprávněními, i když se role spouští s normálními oprávněními.

Atribut executionContext nastaví úroveň oprávnění spouštěcí úlohy. Použití executionContext="limited" znamená, že úloha po spuštění má stejnou úroveň oprávnění jako role. Použití executionContext="elevated" znamená, že úloha po spuštění má oprávnění správce, což umožňuje, aby úloha po spuštění prováděla úlohy správce, aniž by udělovala oprávnění správce vaší roli.

Příkladem úlohy po spuštění, která vyžaduje zvýšená oprávnění, je úloha po spuštění, která ke konfiguraci služby IIS používá AppCmd.exe . AppCmd.exe vyžaduje executionContext="elevated".

Použijte odpovídající typ úkolu.

Atribut taskType určuje způsob spuštění úlohy. Existují tři hodnoty: jednoduché, pozadí a popředí. Úlohy na pozadí a popředí se spouštějí asynchronně a pak se jednoduché úlohy provádějí synchronně po jednom.

Pomocí jednoduchých úloh po spuštění můžete nastavit pořadí, ve kterém se úlohy poběží, podle pořadí, ve kterém jsou úkoly uvedeny v souboru ServiceDefinition.csdef. Pokud jednoduchý úkol končí nenulovým ukončovacím kódem, pak se spouštěcí procedura zastaví a role se nespustí.

Rozdíl mezi úlohami spuštění na pozadí a úlohami spuštění na popředí spočívá v tom, že úlohy popředí udržují roli spuštěnou až do ukončení úlohy popředí . To také znamená, že pokud úloha popředí přestane reagovat nebo dojde k chybovému ukončení, role se nerecykluje, dokud se úkol popředí nevynutí zavření. Z tohoto důvodu se úlohy na pozadí doporučují pro úlohy asynchronního spuštění, pokud tuto funkci úlohy na popředí nepotřebujete.

Ukončení dávkových souborů pomocí příkazu EXIT /B 0

Role se spustí pouze v případě, že je úroveň chyby z každého jednoduchého spouštěcího úkolu nulová. Ne všechny programy nastavily úroveň chyby (ukončovací kód) správně, takže dávkový soubor by měl končit znakem , EXIT /B 0 pokud vše běželo správně.

Chybějící EXIT /B 0 na konci spouštěcího dávkového souboru je běžnou příčinou rolí, které se nespustí.

Poznámka

Všiml(a) jsem si, že při použití parametru někdy přestanou /B reagovat vnořené dávkové soubory. Můžete se ujistit, že k tomuto problému nedojde, pokud váš aktuální dávkový soubor volá jiný dávkový soubor, například pokud používáte obálku protokolu. V tomto případě můžete parametr vynechat /B .

Očekávat, že se úlohy po spuštění spustí více než jednou

Ne všechny recyklace rolí zahrnují restartování, ale všechny recyklace rolí zahrnují spuštění všech úloh po spuštění. To znamená, že mezi restartováními musí být možné úlohy po spuštění spustit vícekrát bez jakýchkoli problémů. To je popsáno v předchozí části.

Použití místního úložiště k ukládání souborů, ke kterým je potřeba přistupovat v roli

Pokud chcete během spouštěcí úlohy zkopírovat nebo vytvořit soubor, který je pak přístupný pro vaši roli, musí být tento soubor umístěn v místním úložišti. Viz předchozí část.

Další kroky

Kontrola modelu a balíčku cloudové služby

Přečtěte si další informace o tom, jak úkoly fungují.

Vytvořte a nasaďte balíček cloudové služby.