VERTRIEB: 1-800-867-1380

Bewährte Methoden für Starttasks

Letzte Aktualisierung: November 2013

Starttasks legen globale Attribute fest

Da Starttasks ausgeführt werden, bevor IIS vollständig gestartet und konfiguriert wurde, eignen sie sich nicht zum Konfigurieren von Website-, Rollen- oder Instanzattributen. Starttasks eignen sich besser zum Konfigurieren von globalen Attributen.

Website-, rollen- und instanzspezifische Attribute sollten in der Microsoft.WindowsAzure.ServiceRuntime.RoleEntryPoint.OnStart-Methode festgelegt werden.

Startaktivitäten sollten immer protokolliert werden

Visual Studio bietet keinen Debugger zum schrittweisen Durchlaufen von Batchdateien. Daher sollten möglichst viele Daten zur Ausführung von Batchdateien gewonnen werden. Durch das Protokollieren der Ausgabe von Batchdateien, sowohl von stdout als auch von stderr, können Sie wichtige Informationen erhalten, die Sie beim Debuggen und Korrigieren von Batchdateien nutzen können. Um stdout und stderr in der Datei StartupLog.txt in dem Verzeichnis zu protokollieren, auf das die TEMP-Umgebungsvariable verweist, fügen Sie am Ende der zu protokollierenden Zeilen den Text >> "%TEMP%\StartupLog.txt" 2>&1 hinzu. Geben Sie beispielsweise Folgendes an, um setup.exe im Verzeichnis %PathToApp1Install% auszuführen:

"%PathToApp1Install%\setup.exe" >> "%TEMP%\StartupLog.txt" 2>&1

Wenn die gesamte Ausgabe des Starttasks protokolliert werden soll, ohne am Ende jeder Zeile >> "%TEMP%\StartupLog.txt" 2>&1 hinzuzufügen, sind zwei Startbatchdateien erforderlich. Die erste Batchdatei ruft die zweite Batchdatei mit Umleitung auf, um alle Aktivitäten der zweiten Batchdatei zu protokollieren. Dies ist erforderlich, damit die richtige Umleitung erfolgt.

Nachfolgend wird das Umleiten der gesamten Ausgabe einer Startbatchdatei gezeigt. In diesem Beispiel erstellt die Datei ServerDefinition.csdef einen Starttask, der Startup1.cmd aufruft. Startup1.cmd ruft Startup2.cmd auf und leitet die gesamte Ausgabe zu %TEMP%\StartupLog.txt um.

ServiceDefinition.cmd:

    <Startup>
      <Task commandLine="Startup1.cmd" executionContext="limited" taskType="simple" />
    </Startup>

Startup1.cmd:

REM   Startup1.cmd calls the main startup batch file, Startup2.cmd, redirecting all output 
REM   to the StartupLog.txt log file.

REM   Log the startup date and time.
ECHO Startup1.cmd: >> "%TEMP%\StartupLog.txt" 2>&1
ECHO Current date and time: >> "%TEMP%\StartupLog.txt" 2>&1
DATE /T >> "%TEMP%\StartupLog.txt" 2>&1
TIME /T >> "%TEMP%\StartupLog.txt" 2>&1
ECHO Starting up Startup2.cmd. >> "%TEMP%\StartupLog.txt" 2>&1

REM   Call the Startup2.cmd batch file, redirecting all output to the StartupLog.txt log file.
START /B /WAIT Startup2.cmd >> "%TEMP%\StartupLog.txt" 2>&1

REM   Log the completion of Startup1.cmd.
ECHO Returned to Startup1.cmd. >> "%TEMP%\StartupLog.txt" 2>&1

IF ERRORLEVEL EQU 0 (
   REM   No errors occurred. Exit Startup1.cmd normally.
   EXIT /B 0
) ELSE (
   REM   Log the error.
   ECHO An error occurred. The ERRORLEVEL = %ERRORLEVEL%.  >> "%TEMP%\StartupLog.txt" 2>&1
   EXIT %ERRORLEVEL%
)

Startup2.cmd:

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.
EXIT /B %ERRORLEVEL%

Legen Sie den executionContext für Starttasks ordnungsgemäß fest

Legen Sie die Berechtigungen für den Starttask ordnungsgemäß fest. Manchmal müssen Starttasks mit erweiterten Berechtigungen ausgeführt werden, während Rollen mit normalen Berechtigungen ausgeführt werden.

Das executionContext-Attribut legt die Berechtigungsstufe des Starttasks fest. Wenn executionContext="limited" verwendet wird, weist der Starttask die gleiche Berechtigungsstufe wie die Rolle auf. Wenn executionContext="elevated" verwendet wird, verfügt der Starttask über Administratorberechtigungen, sodass er Administratoraufgaben ausführen darf, ohne dass der Rolle Administratorberechtigungen erteilt werden.

Ein Beispiel für einen Starttask, der erweiterte Berechtigungen erfordert, ist ein Starttask, der AppCmd.exe zum Konfigurieren von IIS verwendet. AppCmd.exe erfordert executionContext="elevated" im Task-Element.

Im folgenden Beispiel werden für den Starttask ConfigureIISSettings.cmd erweiterte Berechtigungen festgelegt:

    <Startup>
      <Task commandLine="ConfigureIISSettings.cmd" executionContext="elevated" taskType="simple" />
    </Startup>

Verwenden Sie den geeigneten taskType

Das taskType-Attribut bestimmt, wie der Starttask ausgeführt wird. Es gibt drei taskType-Werte: simple, background und foreground. Der background-Task und der foreground-Task werden asynchron gestartet, und anschließend werden die simple-Tasks synchron nacheinander ausgeführt.

Für simple-Starttasks können Sie die Ausführungsreihenfolge der Tasks anhand der Reihenfolge festlegen, in der die Tasks in der Datei ServiceDefinition.csdef aufgeführt sind. Wenn ein simple-Task mit einem Exitcode ungleich 0 (null) beendet wird, wird die Startprozedur beendet, und die Rolle wird nicht gestartet.

Der Unterschied zwischen background-Starttasks und foreground-Starttasks besteht darin, dass foreground-Tasks die Ausführung der Rolle fortsetzen, bis der foreground-Task beendet wird. Dies bedeutet außerdem, dass beim Hängenbleiben oder Absturz des foreground-Tasks die Rolle erst wiederverwendet wird, nachdem das Schließen des foreground-Tasks erzwungen wurde. Aus diesem Grund werden background-Tasks für asynchrone Starttasks empfohlen, es sei denn, Sie benötigen diese Funktion des foreground-Tasks.

Beenden Sie Batchdateien mit EXIT /B 0

Die Rolle wird nur gestartet, wenn der errorlevel jedes simple-Starttasks 0 (null) ist. Nicht alle Programme legen den errorlevel (Exitcode) ordnungsgemäß fest. Daher muss die Batchdatei mit dem EXIT /B 0-Befehl enden.

Ein fehlender EXIT /B 0-Befehl am Ende einer Startbatchdatei ist eine häufige Ursache für nicht startende Rollen.

Gehen Sie davon aus, dass Starttasks mehrmals ausgeführt werden

Nicht jede Wiederverwendung einer Rolle beinhaltet einen Neustart, jedoch beinhaltet jede Rollenwiederverwendung das Ausführen aller Starttasks. Daher müssen Starttasks mehrmals zwischen Neustarts ausgeführt werden können. Dies wird in Strategien zum Schreiben von Starttasks, die mehrmals ausgeführt werden können ausführlich erläutert.

Speichern Sie Dateien, auf die in der Rolle zugegriffen werden muss, im lokalen Speicher

Wenn Sie während des Starttasks eine Datei kopieren oder erstellen möchten, auf die dann die Rolle Zugriff hat, muss sich diese Datei im lokalen Speicher befinden. Ausführliche Anweisungen zum Erstellen und Verwenden des lokalen Speichers für den Starttask und die Rolle finden Sie im Artikel Verwenden des lokalen Speichers zum Speichern von Dateien während des Starts.

Siehe auch

Fanden Sie dies hilfreich?
(1500 verbleibende Zeichen)
Vielen Dank für Ihr Feedback.
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:
© 2014 Microsoft