Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Importante
Cloud Services (clásico) ahora está en desuso para todos los clientes a partir del 1 de septiembre de 2024. Microsoft detendrá y cerrará todas las implementaciones en curso y los datos se perderán de forma permanente a partir de octubre de 2024. Las nuevas implementaciones deben usar el nuevo modelo de implementación basado en Azure Resource Manager Azure Cloud Services (soporte extendido).
Puede usar las tareas de inicio para realizar operaciones antes de que se inicie un rol. Las operaciones que puede realizar incluyen instalar un componente, registrar componentes del modelo de objetos componentes (COM), establecer claves del registro o iniciar un proceso de larga duración.
Nota:
Las tareas de inicio no son aplicables a las máquinas virtuales, solo a los roles web y de trabajo del servicio en la nube.
Cómo funcionan las tareas de inicio
Las tareas de inicio son acciones realizadas antes de que los roles empiecen. El archivo ServiceDefinition.csdef define las tareas de inicio mediante el elemento Task dentro del elemento Startup . Con frecuencia, las tareas de inicio son archivos por lotes, pero también pueden ser aplicaciones de consola o archivos por lotes que inician scripts de PowerShell.
Las variables de entorno pasan información a una tarea de inicio y el almacenamiento local puede usarse para pasar información de una tarea de inicio. Por ejemplo, una variable de entorno puede especificar la ruta de acceso a un programa que quiera instalar, los archivos pueden escribirse en un almacenamiento local. Desde allí, los roles pueden leer los archivos.
La tarea de inicio puede registrar información y errores en el directorio especificado por la variable de entorno TEMP . Durante la tarea de inicio, la variable de entorno TEMP se resuelve en C:\Resources\temp\[guid].[ rolename]\RoleTemp directory cuando se ejecuta en la nube.
Las tareas de inicio también se puede ejecutar varias veces entre reinicios. Por ejemplo, se ejecuta la tarea de inicio cada vez que el rol se recicla y los reciclajes de rol pueden no incluir siempre un reinicio. Las tareas de inicio deben escribirse de forma que les sea posible ejecutarse varias veces sin problemas.
Las tareas de inicio deben terminar con un errorlevel (o código de salida) de cero para que se complete el proceso de inicio. Si una tarea de inicio finaliza con un errorlevel distinto de cero, el rol no se inicia.
Orden de inicio de rol
A continuación se enumera el procedimiento de inicio de rol en Azure:
La instancia se marca como Starting y no recibe tráfico.
Todas las tareas de inicio se ejecutan según su atributo taskType .
Las tareas simples se ejecutan de forma sincrónica, una a la vez.
Las tareas en segundo plano y en primer plano se inician de forma asincrónica, paralelas a la tarea de inicio.
Advertencia
Puede que IIS no se haya configurado por completo durante la fase de la tarea de inicio en el proceso de inicio, por lo que los datos específicos de rol pueden no estar disponibles. Las tareas de inicio que requieren datos específicos del rol deben usar Microsoft.WindowsAzure.ServiceRuntime.RoleEntryPoint.OnStart.
Se inicia el proceso anfitrión de roles y se crea el sitio en Internet Information Services (IIS).
Se llama al método Microsoft.WindowsAzure.ServiceRuntime.RoleEntryPoint.OnStart .
La instancia se marca como Ready y el tráfico se enruta a la instancia.
Se llama al método Microsoft.WindowsAzure.ServiceRuntime.RoleEntryPoint.Run .
Ejemplo de una tarea de inicio
Las tareas de inicio se definen en el archivo ServiceDefinition.csdef , en el elemento Task . El atributo commandLine especifica el nombre y los parámetros del archivo por lotes de inicio o el comando de consola, el atributo executionContext especifica el nivel de privilegio de la tarea de inicio y el atributo taskType especifica cómo se ejecuta la tarea.
En este ejemplo, se crea una variable de entorno , MyVersionNumber, para la tarea de inicio y se establece en el valor "1.0.0.0".
ServiceDefinition.csdef:
<Startup>
<Task commandLine="Startup.cmd" executionContext="limited" taskType="simple" >
<Environment>
<Variable name="MyVersionNumber" value="1.0.0.0" />
</Environment>
</Task>
</Startup>
En el ejemplo siguiente, el archivo por lotes Startup.cmd escribe la línea "La versión actual es 1.0.0.0" en el archivo StartupLog.txt del directorio especificado por la variable de entorno TEMP. La EXIT /B 0 línea garantiza que la tarea de inicio finalice con un nivel de error de cero.
ECHO The current version is %MyVersionNumber% >> "%TEMP%\StartupLog.txt" 2>&1
EXIT /B 0
Nota:
En Visual Studio, la propiedad Copiar en el directorio de salida del archivo por lotes de inicio debe establecerse en Copiar siempre para asegurarse de que el archivo por lotes de inicio se implemente correctamente en el proyecto en Azure (approot\bin para roles web y approot para roles de trabajo).
Descripción de los atributos de la tarea
A continuación se describen los atributos del elemento Task en el archivo ServiceDefinition.csdef :
commandLine : especifica la línea de comandos para la tarea de inicio:
- El comando que, con los parámetros opcionales de la línea de comandos, comienza la tarea de arranque.
- Con frecuencia este atributo es el nombre de archivo de un archivo por lotes .bat o .cmd.
- La tarea está relacionada con la carpeta AppRoot\Bin para el despliegue. Las variables de entorno no se expanden para determinar la ruta de acceso y el archivo de la tarea. Si se requiere la expansión del entorno, puede crear un pequeño script .cmd que llame a la tarea de inicio.
- Puede ser una aplicación de consola o un archivo por lotes que inicia un script de PowerShell.
executionContext : especifica el nivel de privilegio para la tarea de inicio. El nivel de privilegio puede ser limitado o elevado.
-
limitado
la tarea de inicio se ejecuta con los mismos privilegios que el rol. Cuando el atributo executionContext para el elemento Runtime también está limitado, se usan privilegios de usuario. -
elevado
la tarea de inicio se ejecuta con privilegios de administrador. Estos privilegios permiten a las tareas de inicio instalar programas, realizar cambios en la configuración de IIS, realizar cambios en el registro y otras tareas de nivel de administrador, sin aumentar el nivel de privilegio del propio rol.
Nota:
No es preciso que el nivel de privilegios de la tarea de inicio sea el mismo que el del propio rol.
taskType : especifica la forma en que se ejecuta una tarea de inicio.
sencillo
Las tareas se ejecutan de forma sincrónica, una a la vez, en el orden especificado en el archivo ServiceDefinition.csdef . Cuando una tarea de inicio simple finaliza con un nivel de error de cero, se ejecuta la siguiente tarea de inicio simple . Si no hay más tareas de inicio sencillas por ejecutar, entonces el rol en sí mismo comienza.Nota:
Si la tarea simple termina con un errorlevel distinto de cero, se bloqueará la instancia. Las tareas de inicio simples posteriores y el propio rol no se iniciarán.
Para asegurarse de que el archivo por lotes termina con un errorlevel de cero, ejecute el comando
EXIT /B 0al final del proceso de archivo por lotes.fondo
Las tareas se ejecutan de forma asincrónica, en paralelo con el inicio del rol.primer plano
Las tareas se ejecutan de forma asincrónica, en paralelo con el inicio del rol. La diferencia clave entre una tarea en primer plano y una tarea en segundo plano es que una tarea en primer plano impide al rol reciclarse o cerrarse hasta que finalice la tarea. Las tareas en segundo plano no tienen esta restricción.
Variables de entorno
Las variables de entorno son una manera de pasar información a una tarea de inicio. Por ejemplo, puede colocar la ruta de acceso a un blob que contiene un programa para instalar, o los números de puerto que usa el rol o las configuraciones que controlan las funciones de la tarea de inicio.
Hay dos tipos de variables de entorno para las tareas de inicio; variables de entorno estáticas y variables de entorno basadas en miembros de la clase RoleEnvironment . Ambos se encuentran en la sección Entorno del archivo ServiceDefinition.csdef y usan el elemento Variable y el atributo name .
Las variables de entorno estáticas usan el atributo value del elemento Variable . En el ejemplo anterior se crea la variable de entorno MyVersionNumber que tiene un valor estático de "1.0.0.0". Otro ejemplo sería crear una variable de entorno StagingOrProduction , que se puede establecer manualmente en valores de "ensayo" o "producción" para realizar diferentes acciones de inicio en función del valor de la variable de entorno StagingOrProduction .
Las variables de entorno basadas en miembros de la clase RoleEnvironment no usan el atributo value del elemento Variable . En su lugar, el elemento secundario RoleInstanceValue , con el valor de atributo XPath adecuado, se usa para crear una variable de entorno basada en un miembro específico de la clase RoleEnvironment . Los valores del atributo XPath para acceder a varios valores roleEnvironment se pueden encontrar aquí.
Por ejemplo, para crear una variable de entorno "true" cuando la instancia se ejecuta en el emulador de proceso y "false" al ejecutarse en la nube, use los siguientes elementos Variable y RoleInstanceValue :
<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>
Pasos siguientes
Aprenda a realizar algunas tareas de inicio comunes con el servicio en la nube.
Empaquetar el servicio en la nube.