Delen via


Opstarttaken configureren en uitvoeren voor een Azure Cloud Service (klassiek)

Belangrijk

Cloud Services (klassiek) is vanaf 1 september 2024 afgeschaft voor alle klanten. Bestaande actieve implementaties worden gestopt en afgesloten door Microsoft en de gegevens gaan vanaf oktober 2024 definitief verloren. Nieuwe implementaties moeten gebruikmaken van het nieuwe op Azure Resource Manager gebaseerde implementatiemodel Azure Cloud Services (uitgebreide ondersteuning).

U kunt opstarttaken gebruiken om bewerkingen uit te voeren voordat een rol wordt gestart. Bewerkingen die u mogelijk wilt uitvoeren, zijn onder andere het installeren van een onderdeel, het registreren van COM-onderdelen (Component Object Model), het instellen van registersleutels of het starten van een langlopend proces.

Notitie

Opstarttaken zijn niet van toepassing op virtuele machines, alleen voor web- en werkrollen in de cloudservice.

Hoe opstarttaken werken

Opstarttaken zijn acties die worden uitgevoerd voordat uw rollen beginnen. Het bestand ServiceDefinition.csdef definieert opstarttaken met behulp van het taakelement in het opstartelement . Opstarttaken zijn vaak batchbestanden, maar het kunnen ook consoletoepassingen zijn of batchbestanden die PowerShell-scripts starten.

Omgevingsvariabelen geven informatie door aan een opstarttaak en lokale opslag kan worden gebruikt om informatie door te geven uit een opstarttaak. Een omgevingsvariabele kan bijvoorbeeld het pad opgeven naar een programma dat u wilt installeren en bestanden naar lokale opslag kunnen worden geschreven. Van daaruit kunnen uw rollen de bestanden lezen.

Uw opstarttaak kan gegevens en fouten vastleggen in de map die is opgegeven door de omgevingsvariabele TEMP . Tijdens de opstarttaak wordt de omgevingsvariabele TEMP omgezet in C :\Resources\temp\[guid].[ rolename]\RoleTemp-map wanneer deze wordt uitgevoerd in de cloud.

Opstarttaken kunnen ook verschillende keren worden uitgevoerd tussen het opnieuw opstarten. De opstarttaak wordt bijvoorbeeld telkens uitgevoerd wanneer de rol wordt gerecycled en rolrecyclings bevatten mogelijk niet altijd opnieuw opstarten. Opstarttaken moeten zodanig worden geschreven dat ze meerdere keren zonder problemen kunnen worden uitgevoerd.

Opstarttaken moeten eindigen met een foutniveau (of afsluitcode) van nul om het opstartproces te kunnen voltooien. Als een opstarttaak eindigt met een foutniveau zonder nul, kan de rol niet worden gestart.

Opstartvolgorde voor rollen

Hieronder ziet u de opstartprocedure voor rollen in Azure:

  1. Het exemplaar wordt gemarkeerd als Starten en ontvangt geen verkeer.

  2. Alle opstarttaken worden uitgevoerd op basis van het kenmerk taskType .

    • De eenvoudige taken worden synchroon uitgevoerd, één voor één.

    • De achtergrond - en voorgrondtaken worden asynchroon gestart, parallel aan de opstarttaak.

      Waarschuwing

      IIS is mogelijk niet volledig geconfigureerd tijdens de opstarttaakfase in het opstartproces, waardoor rolspecifieke gegevens mogelijk niet beschikbaar zijn. Opstarttaken waarvoor rolspecifieke gegevens zijn vereist, moeten Gebruikmaken van Microsoft.WindowsAzure.ServiceRuntime.RoleEntryPoint.OnStart.

  3. Het hostproces voor rollen wordt gestart en de site wordt gemaakt in IIS (Internet Information Services).

  4. De methode Microsoft.WindowsAzure.ServiceRuntime.RoleEntryPoint.OnStart wordt aangeroepen.

  5. Het exemplaar is gemarkeerd als Gereed en verkeer wordt doorgestuurd naar het exemplaar.

  6. De methode Microsoft.WindowsAzure.ServiceRuntime.RoleEntryPoint.Run wordt aangeroepen.

Voorbeeld van een opstarttaak

Opstarttaken worden gedefinieerd in het bestand ServiceDefinition.csdef in het element Taak . Het kenmerk CommandLine geeft de naam en parameters van het opstartbatchbestand of de consoleopdracht op, het kenmerk executionContext specificeert het bevoegdheidsniveau van de opstarttaak en het kenmerk taskType geeft aan hoe de taak wordt uitgevoerd.

In dit voorbeeld wordt een omgevingsvariabele MyVersionNumber gemaakt voor de opstarttaak en ingesteld op de waarde 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>

In het volgende voorbeeld schrijft het Startup.cmd batchbestand de regel 'De huidige versie is 1.0.0.0' naar het StartupLog.txt-bestand in de map die is opgegeven door de temp-omgevingsvariabele. De EXIT /B 0 regel zorgt ervoor dat de opstarttaak eindigt met een foutniveau van nul.

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

Notitie

In Visual Studio moet de eigenschap Kopiëren naar uitvoermap voor het opstartbatchbestand worden ingesteld op Altijd kopiëren om ervoor te zorgen dat uw opstartbatchbestand correct is geïmplementeerd in uw project in Azure (approot\bin voor webrollen en approot voor werkrolrollen).

Beschrijving van de taakkenmerken

Hieronder worden de kenmerken van het taakelement in het bestand ServiceDefinition.csdef beschreven:

commandLine - Hiermee geeft u de opdrachtregel voor de opstarttaak:

  • De opdracht, met optionele opdrachtregelparameters, waarmee de opstarttaak wordt gestart.
  • Dit kenmerk is vaak de bestandsnaam van een .cmd of .bat batchbestand.
  • De taak is relatief ten opzichte van de map AppRoot\Bin voor de implementatie. Omgevingsvariabelen worden niet uitgebreid bij het bepalen van het pad en bestand van de taak. Als omgevingsuitbreiding is vereist, kunt u een klein .cmd script maken dat uw opstarttaak aanroept.
  • Dit kan een consoletoepassing of een batchbestand zijn waarmee een PowerShell-script wordt gestart.

executionContext : hiermee geeft u het bevoegdheidsniveau voor de opstarttaak op. Het bevoegdheidsniveau kan worden beperkt of verhoogd:

  • beperkt
    De opstarttaak wordt uitgevoerd met dezelfde bevoegdheden als de rol. Wanneer het kenmerk executionContext voor het runtime-element ook beperkt is, worden gebruikersbevoegdheden gebruikt.
  • verheven
    De opstarttaak wordt uitgevoerd met beheerdersbevoegdheden. Met deze bevoegdheden kunnen opstarttaken programma's installeren, IIS-configuratiewijzigingen aanbrengen, registerwijzigingen en andere taken op beheerdersniveau uitvoeren, zonder het bevoegdheidsniveau van de rol zelf te verhogen.

Notitie

Het bevoegdheidsniveau van een opstarttaak hoeft niet hetzelfde te zijn als de rol zelf.

taskType : hiermee geeft u op hoe een opstarttaak wordt uitgevoerd.

  • eenvoudig
    Taken worden synchroon uitgevoerd, één voor één, in de volgorde die is opgegeven in het bestand ServiceDefinition.csdef . Wanneer een eenvoudige opstarttaak eindigt met een foutniveau van nul, wordt de volgende eenvoudige opstarttaak uitgevoerd. Als er geen eenvoudige opstarttaken meer zijn om uit te voeren, wordt de rol zelf gestart.

    Notitie

    Als de eenvoudige taak eindigt op een foutniveau dat niet nul is, wordt het exemplaar geblokkeerd. Volgende eenvoudige opstarttaken en de rol zelf worden niet gestart.

    Als u ervoor wilt zorgen dat uw batchbestand eindigt met een foutniveau van nul, voert u de opdracht EXIT /B 0 uit aan het einde van het batchbestandsproces.

  • achtergrond
    Taken worden asynchroon uitgevoerd, parallel met het opstarten van de rol.

  • voorgrond
    Taken worden asynchroon uitgevoerd, parallel met het opstarten van de rol. Het belangrijkste verschil tussen een voorgrond- en achtergrondtaak is dat een voorgrondtaak voorkomt dat de rol wordt gerecycled of afgesloten totdat de taak eindigt. De achtergrondtaken hebben deze beperking niet.

Omgevingsvariabelen

Omgevingsvariabelen zijn een manier om informatie door te geven aan een opstarttaak. U kunt bijvoorbeeld het pad naar een blob plaatsen die een programma bevat dat moet worden geïnstalleerd of poortnummers die door uw rol worden gebruikt, of instellingen voor het beheren van functies van uw opstarttaak.

Er zijn twee soorten omgevingsvariabelen voor opstarttaken; statische omgevingsvariabelen en omgevingsvariabelen op basis van leden van de klasse RoleEnvironment . Beide bevinden zich in de sectie Omgeving van het bestand ServiceDefinition.csdef en gebruiken zowel het element Variabele als het naamkenmerk.

Statische omgevingsvariabelen gebruiken het waardekenmerk van het element Variabele . In het voorgaande voorbeeld wordt de omgevingsvariabele MyVersionNumber gemaakt met een statische waarde van '1.0.0.0'. Een ander voorbeeld is het maken van een omgevingsvariabele StagingOrProduction, die u handmatig kunt instellen op waarden van fasering of productie om verschillende opstartacties uit te voeren op basis van de waarde van de omgevingsvariabele StagingOrProduction.

Omgevingsvariabelen op basis van leden van de klasse RoleEnvironment gebruiken niet het waardekenmerk van het element Variabele . In plaats daarvan wordt het onderliggende element RoleInstanceValue , met de juiste XPath-kenmerkwaarde , gebruikt om een omgevingsvariabele te maken op basis van een specifiek lid van de klasse RoleEnvironment . De waarden voor het XPath-kenmerk voor toegang tot verschillende RoleEnvironment-waarden vindt u hier.

Als u bijvoorbeeld een omgevingsvariabele wilt maken die 'waar' is wanneer het exemplaar wordt uitgevoerd in de rekenemulator en 'false' wanneer het wordt uitgevoerd in de cloud, gebruikt u de volgende variabelen - en RoleInstanceValue-elementen :

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

Volgende stappen

Meer informatie over het uitvoeren van enkele veelvoorkomende opstarttaken met uw cloudservice.

Pak uw cloudservice in.