Exportar (0) Imprimir
Expandir todo

Procedimientos recomendados para las tareas de inicio

Actualizado: noviembre de 2013

Las tareas de inicio establecen atributos globales

Dado que las tareas de inicio se ejecutan antes de que IIS se haya iniciado y configurado completamente, estas tareas de inicio no son apropiadas para la configuración de atributos de sitios, roles o instancias. Las tareas de inicio son más apropiadas para la configuración de atributos globales.

Los atributos de sitos, roles e instancias específicos deben establecerse en el método Microsoft.WindowsAzure.ServiceRuntime.RoleEntryPoint.OnStart.

Registrar siempre las actividades de inicio

Visual Studio no proporciona depuradores para los archivos por lotes, por tanto, está bien obtener todos los datos posibles en la operación de los archivos por lotes. Si se registran los resultados de los archivos por lotes, tanto de stdout como de stderr, podrá obtener información importante para la depuración y corrección de archivos por lotes. Para registrar stdout y stderr en el archivo StartupLog.txt en el directorio al que se señala mediante la variable de entorno TEMP, agregue el texto >> "%TEMP%\StartupLog.txt" 2>&1 al final de líneas específicas que desee registrar. Por ejemplo, para ejecutar setup.exe en el directorio %PathToApp1Install%:

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

Si desea registrar todos los resultados de la tarea de inicio sin agregar >> "%TEMP%\StartupLog.txt" 2>&1 al final de cada línea, se necesitan dos archivos por lotes de inicio. El primer archivo por lotes llamará al segundo archivo por lotes con una redirección para registrar todas las actividades del segundo archivo por lotes. Esto es necesario para que se produzca la redirección.

A continuación, se muestra cómo redirigir todos los resultados de un archivo por lotes de inicio. En este ejemplo, el archivo ServerDefinition.csdef crea una tarea de inicio que llama a Startup1.cmd. Startup1.cmd llama a Startup2.cmd; para ello, redirige todos los resultados 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%

Establecer executionContext correctamente para las tareas de inicio

Establecer los privilegios correctamente para la tarea de inicio. En ocasiones, las tareas de inicio deben ejecutarse con privilegios elevados mientras que los roles se ejecutan con privilegios normales.

El atributo executionContext establece el nivel de privilegios de la tarea de inicio. Si se usa executionContext="limited" indica que la tarea de inicio tendrá el mismo nivel de privilegios que el rol. Si se usa executionContext="elevated" indica que la tarea de inicio tendrá privilegios de administrador, lo cual permite que la tarea de inicio realice tareas administrativas sin otorgar privilegios de administrador al rol.

Un ejemplo de tarea de inicio que requiere privilegios elevados es una tarea de inicio que utiliza AppCmd.exe para configurar IIS. AppCmd.exe requiere executionContext="elevated" en el elemento Task.

En el siguiente ejemplo, se establecen privilegios elevados para la tarea de inicio ConfigureIISSettings.cmd:

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

Utilizar el valor de taskType apropiado

El atributo taskType determina la forma en que la tarea de inicio se ejecutará. Existen tres valores para taskType: simple, background y foreground. Las tareas en segundo plano y en primer plano se inician de forma asincrónica y, posteriormente, las tareas sencillas se ejecutan sincrónicamente de una en una.

Con las tareas de inicio simple, puede establecer el orden en que las tareas se realizarán, que será el orden en el que aparecen en el archivo ServiceDefinition.csdef. Si una tarea simple finaliza con un código de salida que no es cero, el procedimiento de inicio se detendrá y el rol no se iniciará.

La diferencia entre las tareas de inicio en background y las tareas de inicio en foreground es que las tareas en foreground mantendrán el rol en ejecución hasta que la tarea en foreground finalice. También significa que si la tarea en foreground no responde o se bloquea, el rol no se reciclará hasta que se fuerce el cierre de la tarea en foreground. Por este motivo, se recomiendan las tareas en background para las tareas de inicio asincrónicas a menos que necesite esa función de la tarea en foreground.

Finalizar archivos por lotes con EXIT /B 0

El rol se iniciará solamente si el errorlevel de cada una de las tareas de inicio sencillas es cero. No todos los programas establecen el errorlevel (código de salida) correctamente, así que el archivo por lotes debe finalizar con un comando EXIT /B 0.

La falta de EXIT /B 0 al final de un archivo por lotes de inicio es un motivo común de que los roles no se inicien.

Esperar que las tareas de inicio se ejecuten más de una vez

No todos los reciclajes de rol incluyen un reinicio, pero todos reciclajes de rol incluyen la ejecución de las tareas de inicio. Esto significa que las tareas de inicio deben poder ejecutarse varias veces entre reinicios. Esto se describe detalladamente en Estrategias para escribir tareas de inicio que se puedan ejecutar varias veces.

Usar el almacenamiento local para almacenar los archivos a los que se debe obtener acceso en el rol

Si desea copiar o crear un archivo durante la tarea de inicio que es consiguientemente accesible para el rol, ese archivo se debe colocar en el almacenamiento local. Para obtener instrucciones detalladas sobre cómo crear y utilizar el almacenamiento local para la tarea y rol de inicio, vea el artículo Usar el almacenamiento local para almacenar archivos durante el inicio.

Vea también

Mostrar:
© 2014 Microsoft