Esporta (0) Stampa
Espandi tutto

Procedure consigliate per le attività di avvio

Aggiornamento: novembre 2013

Utilizzare le attività di avvio per impostare gli attributi globali

Poiché vengono eseguite prima che IIS sia completamente avviato e configurato, le attività di avvio non sono adatte alla configurazione degli attributi di siti, ruoli o istanze. Sono invece più indicate per configurare gli attributi globali.

Gli attributi specifici di siti, ruoli e istanze devono essere impostati nel metodo Microsoft.WindowsAzure.ServiceRuntime.RoleEntryPoint.OnStart.

Registrare sempre le attività di avvio

In Visual Studio non è previsto un debugger per analizzare i file batch, pertanto è buona pratica ottenere quanti più dati possibile sul funzionamento di tali file. La registrazione dell'output dei file batch, sia stdout che stderr, può fornire informazioni importanti quando si tenta di eseguire il debug e correggere i file batch. Per registrare sia stdout che stderr nel file StartupLog.txt nella directory a cui fa riferimento la variabile di ambiente TEMP, aggiungere il testo >> "%TEMP%\StartupLog.txt" 2>&1 alla fine delle righe specifiche che si desidera registrare. Ad esempio, per eseguire setup.exe nella directory %PathToApp1Install%:

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

Se si desidera registrare tutto l'output dell'attività di avvio senza aggiungere >> "%TEMP%\StartupLog.txt" 2>&1alla fine di ogni riga, sono necessari due file batch di avvio. Il primo file batch chiama il secondo con reindirizzamento per registrare tutte le attività del secondo file batch. Tale operazione è necessaria affinché il reindirizzamento sia corretto.

Di seguito viene illustrato come reindirizzare tutto l'output di un file batch di avvio. In questo esempio il file ServerDefinition.csdef crea un'attività di avvio che chiama Startup1.cmd. Startup1.cmd chiama Startup2.cmd, reindirizzando tutto l'output a %TEMP%\StartupLog.txt.

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%

Impostare executionContext in modo appropriato per le attività di avvio

Impostare i privilegi in modo appropriato per l'attività di avvio. Talvolta le attività di avvio devono essere eseguite con privilegi elevati mentre i ruoli vengono eseguiti con privilegi normali.

L'attributo executionContext imposta il livello di privilegio dell'attività di avvio. L'utilizzo di executionContext="limited" indica che l'attività di avvio avrà lo stesso livello di privilegio del ruolo. L'utilizzo di executionContext="elevated" indica che l'attività di avvio disporrà di privilegi di amministratore, cioè potrà eseguire attività amministrative, senza fornire privilegi di amministratore al ruolo.

Un esempio di attività di avvio che richiede privilegi elevati è un'attività di avvio che utilizza AppCmd.exe per configurare IIS. AppCmd.exe richiede executionContext="elevated" nell'elemento Task.

Nell'esempio seguente vengono impostati privilegi elevati per l'attività di avvio ConfigureIISSettings.cmd:

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

Utilizzare l'attributo taskType appropriato

L'attributo taskType determina il modo in cui la modalità di esecuzione dell'attività di avvio. taskType può avere tre valori: simple, background e foreground. Le attività in background e in primo piano (foreground) vengono avviate in modo asincrono e le attività semplici (simple) vengono eseguite in modo sincrono una alla volta.

Con le attività di avvio simple è possibile impostare l'ordine in cui le attività si verificano in base all'ordine in cui le attività sono elencate nel file ServiceDefinition.csdef. Se un'attività simple termina con un codice di uscita diverso da zero, la procedura di avvio verrà arrestata e il ruolo non verrà avviato.

La differenza tra le attività di avvio background e foreground è che le attività foreground mantengono il ruolo in esecuzione fino alla fine dell'attività foreground. Questo significa anche che se l'attività foreground si blocca o viene arrestata in modo anomalo, il ruolo non verrà riciclato fino alla chiusura forzata dell'attività foreground. Per questo motivo, il tipo background è consigliato per le attività di avvio asincrono a meno che non siano necessarie le funzionalità dell'attività di tipo foreground.

Terminare i file batch con EXIT /B 0

Il ruolo verrà avviato solo se l'attributo errorlevel di ognuna delle attività di avvio semplici è uguale a zero. Non in tutti i programmi errorlevel (codice di uscita) viene impostato correttamente, per cui il file batch deve terminare con un comando EXIT /B 0.

L'assenza di EXIT /B 0 alla fine di un file batch di avvio è una causa comune del mancato avvio dei ruoli.

Prevedere la ripetuta esecuzione delle attività di avvio

Non tutti i ricicli dei ruoli includono un riavvio, ma tutti includono l'esecuzione di tutte le attività di avvio. Ciò significa che deve essere possibile eseguire le attività di avvio più volte tra un riavvio e l'altro. Questo aspetto è descritto in dettaglio in Strategie per la scrittura di attività di avvio che possono essere eseguite più volte.

Utilizzare le risorse di archiviazione locale per archiviare i file che dovranno essere accessibili nel ruolo.

Se si desidera copiare o creare un file durante l'attività di avvio che sia quindi accessibile al ruolo, tale file deve essere posizionato nella risorsa di archiviazione locale. Per istruzioni dettagliate su come creare e utilizzare le risorse di archiviazione locale per le attività di avvio e i ruoli, vedere l'articolo Utilizzare le risorse di archiviazione locale per archiviare i file durante l'avvio

Vedere anche

Mostra:
© 2014 Microsoft