Dela via


Startuppgifter för Common Cloud Service (klassisk)

Viktigt!

Cloud Services (klassisk) är nu inaktuellt för alla kunder från och med den 1 september 2024. Alla befintliga distributioner som körs stoppas och stängs av av Microsoft och data kommer att förloras kontinuerligt från och med oktober 2024. Nya distributioner bör använda den nya Azure Resource Manager-baserade distributionsmodellen Azure Cloud Services (utökad support).

Den här artikeln innehåller några exempel på vanliga startuppgifter som du kanske vill utföra i molntjänsten. Du kan använda startuppgifter för att utföra åtgärder innan en roll startar. Åtgärder som du kanske vill utföra är att installera en komponent, registrera COM-komponenter (Component Object Model), ställa in registernycklar eller starta en tidskrävande process.

Se den här artikeln för att förstå hur startuppgifter fungerar och specifikt hur du skapar poster som definierar en startaktivitet.

Kommentar

Startuppgifter gäller inte för virtuella datorer, endast för webb- och arbetsroller för molntjänster.

Definiera miljövariabler innan en roll startar

Om du behöver miljövariabler som definierats för en viss uppgift använder du miljöelementet i aktivitetselementet.

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

Variabler kan också använda ett giltigt Azure XPath-värde för att referera till något om distributionen. I stället för att använda attributet definierar du ett underordnat value RoleInstanceValue-element.

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

Konfigurera IIS-start med AppCmd.exe

Kommandoradsverktyget AppCmd.exe kan användas för att hantera IIS-inställningar (Internet Information Service) vid start i Azure. AppCmd.exe ger praktisk kommandoradsåtkomst till konfigurationsinställningar för användning i startuppgifter i Azure. När du använder AppCmd.exe kan webbplatsinställningar läggas till, ändras eller tas bort för program och webbplatser.

Det finns dock några saker att se upp för vid användning av AppCmd.exe som en startuppgift:

  • Startuppgifter kan köras mer än en gång mellan omstarter. Till exempel när en roll återvinns.
  • Om en AppCmd.exe åtgärd utförs mer än en gång kan det generera ett fel. Om du till exempel försöker lägga till ett avsnitt i Web.config två gånger kan det generera ett fel.
  • Startuppgifter misslyckas om de returnerar en icke-nollavslutskod eller felnivå. Till exempel när AppCmd.exe genererar ett fel.

Det är en bra idé att kontrollera felnivå efter att du har anropat AppCmd.exe, vilket är lätt att göra om du omsluter anropet till AppCmd.exe med en .cmd fil. Om du upptäcker ett känt felnivåsvar kan du ignorera det eller skicka tillbaka det.

De felnivåvärden som returneras av AppCmd.exe visas i filen winerror.h och kan även visas i Microsoft Developer Network (MSDN).

Exempel på hantering av felnivån

I det här exemplet läggs ett komprimeringsavsnitt och en komprimeringspost för JSON till web.config-filen med felhantering och loggning.

Relevanta avsnitt i filen ServiceDefinition.csdef visas här, bland annat genom att ange attributet executionContext till elevated för att ge AppCmd.exe tillräcklig behörighet för att ändra inställningarna i filen Web.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>

Den Startup.cmd batchfilen använder AppCmd.exe för att lägga till ett komprimeringsavsnitt och en komprimeringspost för JSON i web.config-filen . Den förväntade felnivå på 183 är inställd på noll med hjälp av VERIFY.EXE kommandoradsprogrammet. Oväntade felnivåer loggas till StartupErrorLog.txt.

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%

Lägga till brandväggsregler

I Azure finns det i praktiken två brandväggar. Den första brandväggen styr anslutningar mellan den virtuella datorn och omvärlden. EndPoints-elementet i filen ServiceDefinition.csdef styr brandväggen.

Den andra brandväggen styr anslutningar mellan den virtuella datorn och processerna i den virtuella datorn. Du kan styra brandväggen netsh advfirewall firewall från kommandoradsverktyget.

Azure skapar brandväggsregler för de processer som startas i dina roller. När du till exempel startar en tjänst eller ett program skapar Azure automatiskt de brandväggsregler som krävs för att tjänsten ska kunna kommunicera med Internet. Men om du skapar en tjänst som startas av en process utanför din roll (till exempel en COM+-tjänst eller en schemalagd Windows-uppgift) måste du manuellt skapa en brandväggsregel för att tillåta åtkomst till tjänsten. Dessa brandväggsregler kan skapas med hjälp av en startuppgift.

En startuppgift som skapar en brandväggsregel måste ha en executionContext för upphöjd. Lägg till följande startuppgift i filen ServiceDefinition.csdef .

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

Om du vill lägga till brandväggsregeln måste du använda lämpliga netsh advfirewall firewall kommandon i startbatchfilen. I det här exemplet kräver startuppgiften säkerhet och kryptering för TCP-port (Transmission Control Protocol) 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%

Blockera en specifik IP-adress

Du kan begränsa åtkomsten till en Azure-webbroll till en uppsättning angivna IP-adresser genom att ändra din IIS web.config-fil . Du måste också använda en kommandofil som låser upp avsnittet ipSecurity i filen ApplicationHost.config .

Om du vill låsa upp avsnittet ipSecurity i applicationhost.config-filen skapar du en kommandofil som körs vid rollstart. Skapa en mapp på rotnivån för webbrollen som kallas start och skapa en batchfil med namnet startup.cmd i den här mappen. Lägg till den här filen i Visual Studio-projektet och ange egenskaperna till Kopiera alltid för att säkerställa att du inkluderar den i paketet.

Lägg till följande startuppgift i filen ServiceDefinition.csdef .

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

Lägg till det här kommandot i filen startup.cmd :

@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

Den här uppgiften gör att startup.cmd batchfil körs varje gång webbrollen initieras, vilket säkerställer att det nödvändiga avsnittet ipSecurity låss upp.

Ändra slutligen avsnittet system.webServer i webbrollens web.config-fil för att lägga till en lista över IP-adresser som beviljas åtkomst, enligt följande exempel:

Med den här exempelkonfigurationen kan alla IP-adresser komma åt servern förutom de två definierade

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

Den här exempelkonfigurationen nekar alla IP-adresser från att komma åt servern förutom de två definierade.

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

Skapa en PowerShell-startuppgift

Windows PowerShell-skript kan inte anropas direkt från filen ServiceDefinition.csdef , men de kan anropas inifrån en batchfil för start.

PowerShell (som standard) kör inte osignerade skript. Om du inte signerar skriptet måste du konfigurera PowerShell för att köra osignerade skript. Om du vill köra osignerade skript måste ExecutionPolicy anges till Obegränsad. Inställningen ExecutionPolicy som du använder baseras på versionen av 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%

Om du använder ett gästoperativsystem som kör PowerShell 2.0 eller 1.0 kan du tvinga version 2 att köras och om det inte är tillgängligt använder du version 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%

Skapa filer i lokal lagring från en startuppgift

Du kan använda en lokal lagringsresurs för att lagra filer som skapats av startuppgiften som programmet senare kommer åt.

Om du vill skapa den lokala lagringsresursen lägger du till ett LocalResources-avsnitt i filen ServiceDefinition.csdef och lägger sedan till det underordnade elementet LocalStorage. Ge den lokala lagringsresursen ett unikt namn och en lämplig storlek för startaktiviteten.

Om du vill använda en lokal lagringsresurs i startuppgiften måste du skapa en miljövariabel för att referera till platsen för den lokala lagringsresursen. Sedan kan startuppgiften och programmet läsa och skriva filer till den lokala lagringsresursen.

Relevanta avsnitt i filen ServiceDefinition.csdef visas här:

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

Den här Startup.cmd batchfilen använder till exempel miljövariabeln PathToStartupStorage för att skapa filen MyTest.txt på den lokala lagringsplatsen.

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

Du kan komma åt den lokala lagringsmappen från Azure SDK med hjälp av metoden GetLocalResource .

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

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

Kör i emulatorn eller molnet

Du kan låta startuppgiften utföra olika steg när den körs i molnet jämfört med när den finns i beräkningsemulatorn. Du kanske till exempel bara vill använda en ny kopia av dina SQL-data när du kör i emulatorn. Eller så kanske du vill göra några prestandaoptimeringar för molnet som du inte behöver göra när du kör i emulatorn.

Du kan utföra olika åtgärder på beräkningsemulatorn och molnet genom att skapa en miljövariabel i filen ServiceDefinition.csdef . Sedan testar du miljövariabeln för ett värde i startuppgiften.

Om du vill skapa miljövariabeln lägger du till elementet Variable/RoleInstanceValue och skapar ett XPath-värde för ./RoleEnvironment/Deployment/@emulated Värdet för miljövariabeln %ComputeEmulatorRunning% är true när den körs på beräkningsemulatorn och false när den körs i molnet.

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

Uppgiften kan nu kontrollera miljövariabeln %ComputeEmulatorRunning% för att utföra olika åtgärder baserat på om rollen körs i molnet eller emulatorn. Här är ett .cmd shell-skript som söker efter miljövariabeln.

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

Identifiera att aktiviteten redan har körts

Rollen kan återanvändas utan omstart, vilket gör att startuppgifterna körs igen. Det finns ingen flagga som anger att en uppgift redan har körts på den virtuella värddatorn (VM). Du kan ha vissa uppgifter där det inte spelar någon roll att de körs flera gånger. Du kan dock stöta på en situation där du behöver förhindra att en aktivitet körs mer än en gång.

Det enklaste sättet att identifiera att en uppgift redan har körts är att skapa en fil i mappen %TEMP% när aktiviteten lyckas och leta efter den i början av aktiviteten. Här är ett cmd shell-exempelskript som gör det åt dig.

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

Metodtips för aktiviteter

Här följer några metodtips som du bör följa när du konfigurerar uppgiften för din webb- eller arbetsroll.

Logga alltid startaktiviteter

Visual Studio tillhandahåller inte ett felsökningsprogram för att gå igenom batchfiler, så det är bra att få så mycket data om hur batchfiler fungerar som möjligt. Om du loggar utdata från batchfiler, både stdout och stderr, kan du få viktig information när du försöker felsöka och åtgärda batchfiler. Om du vill logga både stdout och stderr till den StartupLog.txt filen i katalogen som pekas på av miljövariabeln %TEMP% lägger du till texten >> "%TEMP%\\StartupLog.txt" 2>&1 i slutet av de specifika rader som du vill logga. Om du till exempel vill köra setup.exe i katalogen %PathToApp1Install% : "%PathToApp1Install%\setup.exe" >> "%TEMP%\StartupLog.txt" 2>&1

För att förenkla xml-koden kan du skapa en omslutnings-cmd-fil som anropar alla startuppgifter tillsammans med loggning och ser till att varje underordnad uppgift delar samma miljövariabler.

Du kan tycka att det är irriterande dock att använda >> "%TEMP%\StartupLog.txt" 2>&1 i slutet av varje startuppgift. Du kan framtvinga aktivitetsloggning genom att skapa en omslutning som hanterar loggning åt dig. Den här omslutningen anropar den riktiga batchfil som du vill köra. Alla utdata från målbatchfilen omdirigeras till Startuplog.txt-filen.

I följande exempel visas hur du omdirigerar alla utdata från en startbatchfil. I det här exemplet skapar filen ServerDefinition.csdef en startuppgift som anropar logwrap.cmd. logwrap.cmd anropar Startup2.cmd och omdirigerar alla utdata till %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%

Exempel på utdata i filen StartupLog.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 ================================================ 

Dricks

Filen StartupLog.txt finns i mappen C:\Resources\temp\{role identifier}\RoleTemp.

Ange executionContext på rätt sätt för startuppgifter

Ange behörigheter på rätt sätt för startuppgiften. Ibland måste startuppgifter köras med förhöjd behörighet även om rollen körs med normal behörighet.

Attributet executionContext anger behörighetsnivån för startaktiviteten. Det executionContext="limited" innebär att startaktiviteten har samma behörighetsnivå som rollen. Det executionContext="elevated" innebär att startaktiviteten har administratörsbehörighet, vilket gör att startaktiviteten kan utföra administratörsuppgifter utan att ge administratörsbehörighet till din roll.

Ett exempel på en startuppgift som kräver förhöjd behörighet är en startuppgift som använder AppCmd.exe för att konfigurera IIS. AppCmd.exe kräver executionContext="elevated".

Använd lämplig taskType

Attributet taskType avgör hur startaktiviteten körs. Det finns tre värden: enkel, bakgrund och förgrund. Bakgrunds- och förgrundsuppgifterna startas asynkront och sedan körs de enkla uppgifterna synkront en i taget.

Med enkla startuppgifter kan du ange i vilken ordning aktiviteterna körs i den ordning som aktiviteterna visas i filen ServiceDefinition.csdef. Om en enkel uppgift slutar med en icke-nollavslutskod stoppas startproceduren och rollen startar inte.

Skillnaden mellan startuppgifter i bakgrunden och startuppgifter för förgrund är att förgrundsuppgifter håller rollen igång tills förgrundsaktiviteten slutar. Den här strukturen innebär att om förgrundsaktiviteten låser sig eller kraschar förblir rollen ohjulad tills förgrundsaktiviteten tvingas stängas. Därför rekommenderas bakgrundsaktiviteter för asynkrona startuppgifter om du inte behöver den funktionen i förgrundsaktiviteten.

Avsluta batchfiler med EXIT /B 0

Rollen startar bara om felnivå från var och en av dina enkla startuppgifter är noll. Alla program ställer inte in felnivå (slutkod) korrekt, så batchfilen bör sluta med en EXIT /B 0 om allt kördes korrekt.

En saknad EXIT /B 0 i slutet av en startbatchfil är en vanlig orsak till roller som inte startar.

Kommentar

Jag har märkt att kapslade batchfiler ibland slutar svara när parametern /B används. Du kanske vill se till att det här problemet inte inträffar om en annan batchfil anropar din aktuella batchfil, till exempel om du använder loggomslutningen. Du kan utelämna parametern /B i det här fallet.

Förvänta dig att startuppgifter körs mer än en gång

Alla rollåtervinn inkluderar inte en omstart, men alla rollåtervinn är att köra alla startuppgifter. Den här designen innebär att startuppgifter måste kunna köras flera gånger mellan omstarter utan problem, vilket beskrivs i föregående avsnitt.

Använd lokal lagring för att lagra filer som måste nås i rollen

Om du vill kopiera eller skapa en fil under startuppgiften som sedan är tillgänglig för din roll måste filen placeras i lokal lagring. Se föregående avsnitt.

Nästa steg

Granska molntjänstmodellen och paketet

Läs mer om hur uppgifter fungerar.

Skapa och distribuera molntjänstpaketet.