Startåtgärder för Common Cloud Service (klassisk)

Viktigt

Cloud Services (klassisk) är nu inaktuell för nya kunder och kommer att dras tillbaka den 31 augusti 2024 för alla kunder. 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 startåtgärder för att utföra åtgärder innan en roll startar. Åtgärder som du kanske vill utföra omfattar installation av en komponent, registrering av COM-komponenter, inställning av registernycklar eller start av en tidskrävande process.

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

Anteckning

Startåtgärder gäller inte för Virtual Machines, 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 aktivitet använder du miljöelementet i elementet Aktivitet .

<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 valueRoleInstanceValue-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 vid start i Azure. AppCmd.exe ger praktisk kommandoradsåtkomst till konfigurationsinställningar för användning i startuppgifter i Azure. Med AppCmd.exekan 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 när du använderAppCmd.exe som startuppgift:

  • Startåtgärder kan köras mer än en gång mellan omstarter. Till exempel när en roll återanvänds.
  • 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 iWeb.config två gånger kan det generera ett fel.
  • Startåtgärder misslyckas om de returnerar en slutkod som inte är noll eller en felnivå. Till exempel när AppCmd.exe genererar ett fel.

Det är en bra idé att kontrollera felnivå efter att ha 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.

Den felnivå som returneras av AppCmd.exe visas i filen winerror.h och kan också visas på MSDN.

Exempel på hantering av felnivån

I det här exemplet läggs ett komprimeringsavsnitt och en komprimeringspost för JSON till denWeb.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 Web.config-filen :

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

Batchfilen Startup.cmd 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å 183 är inställd på noll med hjälp av VERIFY.EXE kommandoradsprogram. 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. Den här brandväggen styrs av elementet EndPoints i filen ServiceDefinition.csdef .

Den andra brandväggen styr anslutningarna mellan den virtuella datorn och processerna i den virtuella datorn. Den här brandväggen netsh advfirewall firewall kan styras av 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 med förhöjd behörighet. 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 startåtgärden säkerhet och kryptering för TCP-port 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 ApplicationHost.config-filen .

Om du vill låsa upp avsnittet ipSecurity i filenApplicationHost.config skapar du en kommandofil som körs vid rollstart. Skapa en mapp på rotnivå 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 ställ in egenskaperna på Kopiera alltid för att säkerställa att den ingår 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 batchfilen startup.cmd körs varje gång webbrollen initieras, vilket säkerställer att det nödvändiga avsnittet ipSecurity är olåst.

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

Den här exempelkonfigurationen gör att alla IP-adresser kan 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å som definierats.

<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 från en startbatchfil.

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. Den ExecutionPolicy-inställning 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 startaktiviteten och som används senare av ditt program.

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 som refererar till den lokala lagringsresursplatsen. Sedan kan startaktiviteten 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>

Till exempel använder batchfilen Startup.cmd 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 startaktiviteten.

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 din uppgift 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 aktivitet redan har körts på den virtuella värddatorn. 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 uppgift körs mer än en gång.

Det enklaste sättet att identifiera att en aktivitet 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 exempel på ett cmd shell-skript 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 uppgifter

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 inget felsökningsprogram för att stega igenom batchfiler, så det är bra att få så mycket data om driften av batchfiler som möjligt. Genom att logga 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 StartupLog.txt-filen i katalogen som anges 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 startaktiviteter tillsammans med loggning och ser till att varje underordnad uppgift delar samma miljövariabler.

Du kanske tycker att det är irriterande 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 adaptern anropar den riktiga batchfilen som du vill köra. Alla utdata från målbatchfilen omdirigeras till denStartuplog.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 StartupLog.txt-filen :

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

Tips

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

Ange executionContext korrekt för startåtgärder

Ange behörigheter på lämpligt sätt för startåtgärden. Ibland måste startåtgärder köras med förhöjd behörighet även om rollen körs med normala privilegier.

Attributet executionContext anger behörighetsnivån för startaktiviteten. Det executionContext="limited" innebär att startaktiviteten har samma behörighetsnivå som rollen. Med hjälp av executionContext="elevated" innebär det 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 startaktivitet 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örgrundsaktiviteterna 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 slutkod som inte är noll stoppas startproceduren och rollen startar inte.

Skillnaden mellan startaktiviteter i bakgrunden och startaktiviteter i förgrunden är att förgrundsaktiviteter behåller rollen igång tills förgrundsaktiviteten slutar. Det innebär också att om förgrundsaktiviteten låser sig eller kraschar återanvänds inte rollen förrän förgrundsaktiviteten tvingas stängas. Därför rekommenderas bakgrundsaktiviteter för asynkrona startåtgärder 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.

Anteckning

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

Förvänta dig att startåtgärder körs mer än en gång

Alla rollåtervinn innehåller inte en omstart, men alla rollåtervinn är att köra alla startåtgärder. Det innebär att startåtgärder måste kunna köras flera gånger mellan omstarter utan problem. Detta 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 startaktiviteten 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.