Dela via


Så här konfigurerar och kör du startuppgifter för en Azure Cloud Service (klassisk)

Viktigt!

Cloud Services (klassisk) är nu inaktuellt 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).

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.

Kommentar

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

Så här fungerar startuppgifter

Startuppgifter är åtgärder som vidtas innan dina roller börjar. Filen ServiceDefinition.csdef definierar startuppgifter med hjälp av aktivitetselementet i startelementet . Vanliga startuppgifter är batchfiler, men de kan också vara konsolprogram eller batchfiler som startar PowerShell-skript.

Miljövariabler skickar information till en startuppgift och lokal lagring kan användas för att skicka information från en startuppgift. En miljövariabel kan till exempel ange sökvägen till ett program som du vill installera och filer kan skrivas till lokal lagring. Därifrån kan dina roller läsa filerna.

Startuppgiften kan logga information och fel till katalogen som anges av temp-miljövariabeln . Under startaktiviteten matchas temp-miljövariabeln till C:\Resources\temp\[guid].[ rolename]\RoleTemp-katalog när den körs i molnet.

Startåtgärder kan även köras flera gånger mellan omstarter. Startaktiviteten körs till exempel varje gång rollen återvinns, och rollåtervinn kanske inte alltid innehåller en omstart. Startuppgifter ska skrivas på ett sätt som gör att de kan köras flera gånger utan problem.

Startaktiviteter måste sluta med en felnivå (eller slutkod) på noll för att startprocessen ska slutföras. Om en startaktivitet slutar med en felnivå som inte är noll kan rollen inte startas.

Startordning för roll

Följande listar startproceduren för rollen i Azure:

  1. Instansen är markerad som Starta och tar inte emot trafik.

  2. Alla startuppgifter körs enligt deras taskType-attribut .

    • De enkla uppgifterna körs synkront, en i taget.

    • Bakgrunds- och förgrundsuppgifterna startas asynkront, parallellt med startaktiviteten.

      Varning

      IIS kanske inte är helt konfigurerat under startaktivitetsfasen i startprocessen, så rollspecifika data kanske inte är tillgängliga. Startuppgifter som kräver rollspecifika data bör använda Microsoft.WindowsAzure.ServiceRuntime.RoleEntryPoint.OnStart.

  3. Rollvärdprocessen startas och webbplatsen skapas i Internet Information Services (IIS).

  4. Metoden Microsoft.WindowsAzure.ServiceRuntime.RoleEntryPoint.OnStart anropas.

  5. Instansen är markerad som Klar och trafiken dirigeras till instansen.

  6. Metoden Microsoft.WindowsAzure.ServiceRuntime.RoleEntryPoint.Run anropas.

Exempel på en startuppgift

Startuppgifter definieras i filen ServiceDefinition.csdef i aktivitetselementet . Attributet commandLine anger namnet och parametrarna för startbatchfilen eller konsolkommandot, attributet executionContext anger behörighetsnivån för startaktiviteten och attributet taskType anger hur aktiviteten körs.

I det här exemplet skapas en miljövariabel, MyVersionNumber, för startaktiviteten och anges till värdet "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>

I följande exempel skriver Startup.cmd batchfil raden "Den aktuella versionen är 1.0.0.0" till den StartupLog.txt filen i katalogen som anges av temp-miljövariabeln. Raden EXIT /B 0 ser till att startaktiviteten slutar med en felnivå på noll.

ECHO The current version is %MyVersionNumber% >> "%TEMP%\StartupLog.txt" 2>&1
EXIT /B 0

Kommentar

I Visual Studio ska egenskapen Kopiera till utdatakatalog för startbatchfilen vara inställd på Kopiera alltid för att vara säker på att startbatchfilen är korrekt distribuerad till ditt projekt i Azure (approot\bin för webbroller och approot för arbetsroller).

Beskrivning av uppgiftsattribut

Följande beskriver attributen för aktivitetselementet i filen ServiceDefinition.csdef :

commandLine – Anger kommandoraden för startaktiviteten:

  • Kommandot, med valfria kommandoradsparametrar, som påbörjar startaktiviteten.
  • Ofta är det här attributet filnamnet för en .cmd- eller .bat batchfil.
  • Uppgiften är relativ till mappen AppRoot\Bin för distributionen. Miljövariabler expanderas inte för att fastställa aktivitetens sökväg och fil. Om miljöexpansion krävs kan du skapa ett litet .cmd skript som anropar startuppgiften.
  • Kan vara ett konsolprogram eller en batchfil som startar ett PowerShell-skript.

executionContext – Anger behörighetsnivån för startaktiviteten. Behörighetsnivån kan begränsas eller höjas:

  • begränsad
    Startaktiviteten körs med samma behörigheter som rollen. När attributet executionContext för Runtime-elementet också är begränsat används användarbehörigheter.
  • hög
    Startaktiviteten körs med administratörsbehörighet. Med de här behörigheterna kan startuppgifter installera program, göra ändringar i IIS-konfigurationen, utföra registerändringar och andra uppgifter på administratörsnivå, utan att öka behörighetsnivån för själva rollen.

Kommentar

Behörighetsnivån för en startaktivitet behöver inte vara samma som själva rollen.

taskType – Anger hur en startuppgift körs.

  • enkel
    Aktiviteter körs synkront, en i taget, i den ordning som anges i filen ServiceDefinition.csdef . När en enkel startuppgift slutar med en felnivå på noll körs nästa enkla startuppgift. Om det inte finns några fler enkla startuppgifter att köra startar själva rollen.

    Kommentar

    Om den enkla uppgiften slutar med en felnivå som inte är noll blockeras instansen. Efterföljande enkla startuppgifter och själva rollen startar inte.

    För att säkerställa att batchfilen slutar med en felnivå på noll kör du kommandot EXIT /B 0 i slutet av batchfilprocessen.

  • bakgrund
    Aktiviteter körs asynkront, parallellt med starten av rollen.

  • förgrund
    Aktiviteter körs asynkront, parallellt med starten av rollen. Den viktigaste skillnaden mellan en förgrundsaktivitet och en bakgrundsaktivitet är att en förgrundsaktivitet förhindrar att rollen återanvänds eller stängs av tills aktiviteten slutar. Bakgrundsuppgifterna har inte den här begränsningen.

Miljövariabler

Miljövariabler är ett sätt att skicka information till en startuppgift. Du kan till exempel placera sökvägen till en blob som innehåller ett program att installera, eller portnummer som din roll använder, eller inställningar för att styra funktioner i startuppgiften.

Det finns två typer av miljövariabler för startuppgifter. statiska miljövariabler och miljövariabler baserat på medlemmar i klassen RoleEnvironment . Båda finns i avsnittet Miljö i filen ServiceDefinition.csdef och använder både variabelelementet och namnattributet.

Statiska miljövariabler använder värdeattributet för variabelelementet . I föregående exempel skapas miljövariabeln MyVersionNumber som har ett statiskt värde på "1.0.0.0". Ett annat exempel är att skapa miljövariabeln StagingOrProduction, som du manuellt kan ange till värden för "mellanlagring" eller "produktion" för att utföra olika startåtgärder baserat på värdet för miljövariabeln StagingOrProduction.

Miljövariabler som baseras på medlemmar i klassen RoleEnvironment använder inte värdeattributet för variabelelementet. I stället används det underordnade elementet RoleInstanceValue , med lämpligt XPath-attributvärde , för att skapa en miljövariabel baserat på en specifik medlem i klassen RoleEnvironment . Värden för XPath-attributet för åtkomst till olika RoleEnvironment-värden finns här.

Om du till exempel vill skapa en miljövariabel som är "true" när instansen körs i beräkningsemulatorn och "false" när den körs i molnet använder du följande element variable och 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>

Nästa steg

Lär dig hur du utför några vanliga startuppgifter med din molntjänst.

Paketera din molntjänst.