Exportieren (0) Drucken
Alle erweitern

Ausführen von Starttasks in Azure

Letzte Aktualisierung: Mai 2014

Mit Starttasks können Sie Vorgänge vor dem Starten einer Rolle ausführen. Zu diesen Vorgängen zählen das Installieren einer Komponente, Registrieren von COM-Komponenten, Festlegen von Registrierungsschlüsseln oder Starten eines Prozesses mit langer Laufzeit.

noteHinweis
Startaufgaben können nicht für VM-Rollen verwendet werden.

Starttasks sind Aktionen, die vor dem Starten der Rollen ausgeführt werden. Starttasks werden in der Datei ServiceDefinition.csdef mit dem Task-Element im Startup-Element definiert. Bei Starttasks handelt es sich häufig um Batchdateien, sie können aber auch Konsolenanwendungen sein oder Batchdateien, die PowerShell-Skripts starten.

Informationen werden von Umgebungsvariablen an einen Starttask übergeben, und zum Übergeben von Informationen aus einem Starttask kann der lokale Speicher verwendet werden. Beispielsweise kann eine Umgebungsvariable den Pfad zu einem Programm angeben, das Sie installieren möchten, und Dateien können in den lokalen Speicher geschrieben und später von den Rollen gelesen werden.

Der Starttask kann Informationen und Fehler in dem Verzeichnis protokollieren, das von der TEMP-Umgebungsvariablen angegeben wird. Während des Starttasks wird die TEMP-Umgebungsvariable in das Verzeichnis C:\Resources\temp\<GUID>.<Rollenname>\RoleTemp aufgelöst, wenn die Ausführung in der Cloud erfolgt.

Starttasks können zwischen Neustarts mehrmals ausgeführt werden. Beispielsweise wird der Starttask bei jedem Wiederverwenden der Rolle ausgeführt, und das Wiederverwenden von Rollen beinhaltet nicht immer einen Neustart. Starttasks sollten so geschrieben werden, dass sie ohne Probleme mehrmals ausgeführt werden können.

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

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

  1. Die Instanz wird als startende Instanz markiert und empfängt keinen Datenverkehr.

  2. Alle Starttasks werden entsprechend ihrem taskType-Attribut ausgeführt.

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

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

      WarningWarnung
      IIS ist während der Starttaskphase im Startprozess möglicherweise nicht vollständig konfiguriert, daher sind eventuell keine rollenspezifischen Daten verfügbar. Für Starttasks, die rollenspezifische Daten erfordern, sollte Microsoft.WindowsAzure.ServiceRuntime.RoleEntryPoint.OnStart verwendet werden.

  3. Der Rollenhostprozess wird gestartet, und die Website wird in IIS erstellt.

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

  5. Die Instanz wird als bereit markiert, und der Datenverkehr wird zur Instanz weitergeleitet.

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

Starttasks sind in der Datei ServiceDefinition.csdef im Task-Element definiert. Das commandLine-Attribut gibt den Namen und die Parameter der Startbatchdatei oder des Konsolenbefehls 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 den Starttask 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, die sich in dem von der TEMP-Umgebungsvariablen angegebenen Verzeichnis befindet. Die Zeile EXIT /B 0 stellt sicher, dass der Starttask mit dem errorlevel 0 (null) beendet wird.

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

noteHinweis
In Visual Studio sollte die Eigenschaft In Ausgabeverzeichnis kopieren für die Startbatchdatei auf Immer kopieren festgelegt werden, um sicherzustellen, dass die Startbatchdatei ordnungsgemäß unter Windows Azure für das Projekt bereitgestellt wird ("approot\bin" für Webrollen und "approot" für Workerrollen).

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

commandLine – Gibt die Befehlszeile für den Starttask an:

  • Der Befehl, mit optionalen Befehlszeilenparametern, mit dem der Starttask begonnen wird.

  • Dies ist häufig Dateiname einer CMD- oder BAT-Batchdatei.

  • Kann eine Konsolenanwendung oder eine Batchdatei sein, die ein PowerShell-Skript startet. Spezifische Informationen zum Verwenden eines PowerShell-Skripts als Starttask finden Sie unter Verwenden eines PowerShell-Skripts als Starttask.

executionContext – Gibt die Berechtigungsstufe für den Starttask an. Die Berechtigungsstufe kann limited oder elevated lauten:

  • limited – Der Starttask wird mit den gleichen Berechtigungen wie die Rolle ausgeführt. Wenn das executionContext-Attribut für das Runtime-Element ebenfalls limited lautet, werden Benutzerberechtigungen verwendet.

  • elevated – Der Starttask wird mit Administratorberechtigungen ausgeführt. Dies ermöglicht Starttasks das Installieren von Programmen, das Ausführen von IIS-Konfigurationsänderungen, das Ausführen von Registrierungsänderungen und anderer Tasks auf Administratorebene, ohne die Berechtigungsstufe der Rolle zu erhöhen.

noteHinweis
Die Berechtigungsstufe eines Starttasks kann höher als die Berechtigungsstufe einer Rolle sein. Ein Starttask kann mit elevated-Berechtigungen Programme installieren oder Änderungen an IIS-Einstellungen vornehmen, während eine Rolle möglicherweise aus Sicherheitsgründen limited-Berechtigungen verwendet.

taskType – Gibt an, wie ein Starttask ausgeführt wird.

  • simple-Tasks werden synchron nacheinander in der Reihenfolge ausgeführt, die in der Datei ServiceDefinition.csdef angegeben ist. Wenn ein simple-Starttask mit dem errorlevel 0 (null) beendet wurde, wird der nächste simple-Starttask ausgeführt. Wenn keine weiteren auszuführenden simple-Starttasks vorhanden sind, wird die Rolle selbst gestartet.

    noteHinweis
    Wenn der simple-Task mit einem errorlevel ungleich 0 (null) beendet wird, wird die Instanz blockiert. Anschließende simple-Starttasks und die Rolle selbst werden nicht gestartet.

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

  • background-Tasks werden asynchron, parallel zum Starten der Rolle ausgeführt.

  • foreground-Tasks werden asynchron, parallel zum Starten der Rolle ausgeführt. Der Hauptunterschied zwischen einem foreground-Task und einem background-Task besteht darin, dass bei einem foreground-Task die Ausführung der Rolle während der Ausführung des foreground-Tasks fortgesetzt wird. Dies bedeutet außerdem, dass die Rolle nicht beendet oder wiederverwendet wird, wenn der foreground-Task nicht beendet wird. Für die background-Tasks gilt diese Einschränkung nicht, sodass Rollen wiederverwendet werden können, obwohl die background-Tasks nicht abgeschlossen wurden.

Umgebungsvariablen bieten die Möglichkeit, Informationen an einen Starttask zu übergeben. Beispielsweise können Sie den Pfad zu einem BLOB, das ein zu installierendes Programm enthält, Portnummern, die von der Rolle verwendet werden, oder Einstellungen, die Funktionen des Starttasks steuern, in eine Umgebungsvariable aufnehmen.

Es gibt zwei Arten von Umgebungsvariablen für Starttasks: statische Umgebungsvariablen und Umgebungsvariablen, die auf Membern der RoleEnvironment-Klasse basieren. 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 ist das Erstellen einer StagingOrProduction-Umgebungsvariablen, die Sie manuell auf den Wert Staging oder Production festlegen können, um abhängig vom Wert der StagingOrProduction-Umgebungsvariablen unterschiedliche Startaktionen auszuführen.

Umgebungsvariablen, die auf Membern der RoleEnvironment-Klasse basieren, verwenden nicht das value-Attribut des Variable-Elements. Stattdessen wird das untergeordnete RoleInstanceValue-Element mit dem entsprechenden xPath-Attributwert verwendet, um eine Umgebungsvariable auf Grundlage eines bestimmten Members der RoleEnvironment-Klasse zu erstellen. Werte des xPath-Attributs für den Zugriff auf verschiedene RoleEnvironment-Werte finden Sie unter xPath-Werte in Azure.

Um beispielsweise eine Umgebungsvariable zu erstellen, die true ist, wenn die Instanz im Serveremulator ausgeführt wird, und false, wenn sie in der Cloud ausgeführt wird, verwenden Sie das folgende Variable-Element und RoleInstanceValue-Element:

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

Siehe auch

Microsoft führt eine Onlineumfrage durch, um Ihre Meinung zur MSDN-Website zu erfahren. Wenn Sie sich zur Teilnahme entscheiden, wird Ihnen die Onlineumfrage angezeigt, sobald Sie die MSDN-Website verlassen.

Möchten Sie an der Umfrage teilnehmen?
Anzeigen:
© 2015 Microsoft