Freigeben über


Konfigurieren und Ausführen von Startaufgaben für einen Azure-Clouddienst (klassisch)

Wichtig

Cloud Services (klassisch) ist jetzt ab dem 1. September 2024 für alle Kunden veraltet. Alle vorhandenen ausgeführten Bereitstellungen werden beendet und von Microsoft heruntergefahren, und die Daten gehen ab Oktober 2024 dauerhaft verloren. In neuen Bereitstellungen sollte das neue auf Azure Resource Manager basierende Bereitstellungsmodell für Azure Cloud Services (erweiterter Support) verwendet werden.

Mit Startaufgaben können Sie Vorgänge ausführen, bevor eine Rolle gestartet wird. Zu den Vorgängen, die Sie vielleicht ausführen möchten, gehören das Installieren von Komponenten, das Registrieren von COM-Komponenten (Component Object Model), das Festlegen von Registrierungsschlüsseln und das Starten eines zeitintensiven Prozesses.

Hinweis

Startaufgaben gelten nicht für virtuelle Computer, sondern nur für Web- und Workerrollen von Clouddiensten.

Funktionsweise von Startaufgaben

Starttasks sind Aktionen, die vor dem Starten der Rollen ausgeführt werden. Die Datei ServiceDefinition.csdef definiert Starttasks mithilfe des Task-Elements im Startup-Element. Häufig sind Startaufgaben Batchdateien, aber es kann sich auch um Konsolenanwendungen handeln, oder um Batchdateien, die PowerShell-Skripts starten.

Startaufgaben erhalten ihre Informationen aus Umgebungsvariablen, und mit lokalem Speicher können Informationen aus einer Startaufgabe heraus übergeben werden. Eine Umgebungsvariable kann beispielsweise den Pfad zu einem Programm festlegen, das Sie installieren möchten, und Dateien können in den lokalen Speicher geschrieben werden. Von dort aus können Ihre Rollen die Dateien lesen.

Die Startaufgabe kann Informationen und Fehler im angegebenen Verzeichnis protokollieren, das in der TEMP -Umgebungsvariable festgelegt ist. Während des Startvorgangs wird die Umgebungsvariable TEMP in das Verzeichnis C:\Resources\temp\[guid].[rolename]\RoleTemp aufgelöst, wenn sie in der Cloud ausgeführt wird.

Startaufgaben können auch mehrmals zwischen Neustarts ausgeführt werden. Beispielsweise wird der Starttasks bei jeder zyklischen Ausführung der Rolle ausgeführt, und die zyklische Rollenausführung ist nicht immer mit einem Neustart verbunden. Startaufgaben sollten so geschrieben werden, die sie ohne Probleme mehrmals ausgeführt werden können.

Startaufgaben müssen mit dem errorlevel (oder Exitcode) Null (0) enden, damit der Startprozess abgeschlossen wird. Wenn ein Starttask mit einem errorlevel ungleich null endet, kann die Rolle nicht gestartet werden.

Reihenfolge beim Starten einer Rolle

Im Folgenden werden die Schritte beim Starten einer Rolle in Azure aufgeführt:

  1. Die Instanz wird mit Wird gestartet markiert und empfängt keinen Datenverkehr.

  2. Alle Startaufgaben werden gemäß ihres taskType -Attributs ausgeführt.

    • Die simple-Tasks werden synchron nacheinander ausgeführt.

    • Die background-Tasks und foreground-Tasks werden asynchron parallel zum Starttask gestartet.

      Warnung

      IIS ist während der Startaufgabephase des Startprozesses möglicherweise nicht vollständig konfiguriert, sodass rollenspezifische Daten möglicherweise nicht verfügbar sind. Startaufgaben, die rollenspezifische Daten erfordern, sollten Microsoft.WindowsAzure.ServiceRuntime.RoleEntryPoint.OnStartverwenden.

  3. Der Rollenhostprozess wird gestartet und die Website wird in Internetinformationsdienste (Internet Information Services, IIS) erstellt.

  4. Die Microsoft.WindowsAzure.ServiceRuntime.RoleEntryPoint.OnStart -Methode wird aufgerufen.

  5. Die Instanz wird als Ready markiert, und Datenverkehr wird an die Instanz weitergeleitet.

  6. Die Microsoft.WindowsAzure.ServiceRuntime.RoleEntryPoint.Run -Methode wird aufgerufen.

Beispiel für eine Startaufgabe

Startaufgaben werden in der Datei ServiceDefinition.csdef im Task -Element definiert. Das commandLine-Attribut gibt den Namen und die Parameter der Batchdatei oder des Konsolenbefehls für den Startvorgang an, das executionContext-Attribut gibt die Berechtigungsstufe des Starttasks an, und das taskType-Attribut gibt an, wie der Task ausgeführt wird.

In diesem Beispiel wird die Umgebungsvariable MyVersionNumber für die Startaufgabe erstellt und auf den Wert „1.0.0.0“ festgelegt.

ServiceDefinition.csdef:

<Startup>
    <Task commandLine="Startup.cmd" executionContext="limited" taskType="simple" >
        <Environment>
            <Variable name="MyVersionNumber" value="1.0.0.0" />
        </Environment>
    </Task>
</Startup>

Im folgenden Beispiel schreibt die Batchdatei Startup.cmd die Zeile "The current version is 1.0.0.0" in die Datei "StartupLog.txt" im von der TEMP-Umgebungsvariablen angegebenen Verzeichnis. Die Zeile EXIT /B 0 sorgt dafür, dass die Startaufgabe mit dem errorlevel Null (0) beendet wird.

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

Hinweis

In Visual Studio sollte die Eigenschaft In Ausgabeverzeichnis kopieren für die Startbatchdatei auf Immer kopieren festgelegt werden, damit die Startbatchdatei ordnungsgemäß in Azure für das Projekt bereitgestellt wird (approotbin für Webrollen und approot für Workerrollen).

Beschreibung der Aufgabenattribute

Im Folgenden werden die Attribute des Task -Elements in der Datei ServiceDefinition.csdef beschrieben:

commandLine – Legt die Befehlszeile für die Startaufgabe fest:

  • Der Befehl, mit optionalen Befehlszeilenparametern, der die Startaufgabe beginnt.
  • Dieses Attribut ist häufig der Dateiname einer CMD- oder BAT-Batchdatei.
  • Die Aufgabe ist relativ zum Ordner „AppRoot\Bin“ für die Bereitstellung. Umgebungsvariablen werden bei der Bestimmung von Pfad und Dateinamen des Tasks nicht erweitert. Falls die Erweiterung der Umgebung erforderlich ist, können Sie ein kleines CMD-Skript erstellen, das die Startaufgabe aufruft.
  • Dies kann eine Konsolenanwendung oder eine Batchdatei sein, die ein PowerShell-Skriptstartet.

executionContext – Legt die Berechtigungsstufe für die Startaufgabe fest. Die Berechtigungsstufe kann eingeschränkt oder mit erhöhten Rechten sein:

  • limited
    – Die Startaufgabe wird mit den gleichen Berechtigungen wie die Rolle ausgeführt. Wenn das executionContext-Attribut für das Runtime-Element ebenfalls eingeschränkt ist, werden Benutzerberechtigungen verwendet.
  • elevated
    Die Startaufgabe wird mit Administratorrechten ausgeführt. Durch diese Berechtigungen können Starttasks Programme installieren und IIS-Konfigurationsänderungen oder Registrierungsänderungen durchführen, ohne die Berechtigungsstufe der Rolle selbst zu erhöhen.

Hinweis

Die Berechtigungsstufe einer Startaufgabe muss nicht mit derjenigen der Rolle selbst identisch sein.

taskType – Legt fest, wie eine Startaufgabe ausgeführt wird.

  • simple
    – Die Aufgaben werden synchron und nacheinander in der Reihenfolge ausgeführt, in der sie in der Datei ServiceDefinition.csdef aufgeführt werden. Wenn eine simple-Startaufgabe mit errorlevel Null (0) beendet wird, wird die nächste simple-Startaufgabe ausgeführt. Wenn keine weiteren simple-Starttasks ausgeführt werden sollen, wird die Rolle selbst gestartet.

    Hinweis

    Wenn die simple-Aufgabe mit einem von Null abweichenden errorlevel beendet wird, wird die Instanz blockiert. Nachfolgende simple -Startaufgaben sowie die Rolle selbst werden nicht gestartet.

    Um sicherzustellen, dass die Batchdatei mit errorlevel Null (0) beendet wird, führen Sie den Befehl EXIT /B 0 am Ende des Batchdateiprozesses aus.

  • background
    -Aufgaben werden asynchron, parallel zum Start der Rolle ausgeführt.

  • foreground
    -Aufgaben werden asynchron, parallel zum Start der Rolle ausgeführt. Der Hauptunterschied zwischen einem foreground- und einem background-Task ist, dass ein foreground-Task verhindert, dass die Rolle zyklisch erneut gestartet oder heruntergefahren wird, bis der Task beendet wurde. Die background-Tasks haben diese Einschränkung nicht.

Umgebungsvariablen

Umgebungsvariablen sind eine Möglichkeit zur Datenübergabe an eine Startaufgabe. Beispielsweise können Sie dort den Pfad auf ein Blob mit einem zu installierenden Programm und die von der Rolle zu verwendenden Portnummern oder Einstellungen zur Steuerung des Starttasks festlegen.

Es gibt zwei Arten von Umgebungsvariablen für Startaufgaben: statische Umgebungsvariablen und Umgebungsvariablen basierend auf Mitgliedern der RoleEnvironment -Klasse. Beide befinden sich im Environment-Abschnitt der Datei ServiceDefinition.csdef, und beide verwenden das Variable-Element und das name-Attribut.

Statische Umgebungsvariablen verwenden das value-Attribut des Variable-Elements. Im obigen Beispiel wird die Umgebungsvariable MyVersionNumber mit dem statischen Wert 1.0.0.0 erstellt. Ein weiteres Beispiel wäre das Erstellen einer StagingOrProduction-Umgebungsvariable, die Sie manuell auf die Werte staging oder production festlegen können, um anhand des Werts der StagingOrProduction-Umgebungsvariable verschiedene Startvorgänge auszuführen.

Umgebungsvariablen, die auf Membern der RoleEnvironment-Klasse basieren, verwenden das value-Attribut des Variable-Elements nicht. Stattdessen wird das untergeordnete RoleInstanceValue-Element mit dem entsprechenden xPath-Attributwert verwendet, um eine Umgebungsvariable basierend auf einem bestimmten Mitglied der RoleEnvironment-Klasse zu erstellen. Werte für das XPath-Attribut zum Zugriff auf verschiedene RoleEnvironment-Werte finden Sie hier.

Um beispielsweise eine Umgebungsvariable zu erstellen, die den Wert „true“ hat, wenn die Instanz im Serveremulator ausgeführt wird, und „false“, wenn sie in der Cloud ausgeführt wird, verwenden Sie die folgenden Variable- und RoleInstanceValue-Elemente:

<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ächste Schritte

Erfahren Sie, wie Sie einige allgemeine Startaufgaben mit dem Clouddienst ausführen können.

Paket des Clouddiensts erstellen.