Sección: Programación
La programación de
Calendarios
Un calendario es un conjunto de días, que pueden restringir los eventos programados. Cuando un evento programado está vinculado a un calendario, el evento solo se activará si el día actual está incluído en el calendario.
Un calendario se define con los siguientes valores:
- Calendario padre
- Día inicio (día y mes con año opcional)
- Día de fin (día y mes con año opcional)
- Días de la semana
- Meses
- Inclusiones (lista de días con mes, año opcional)
- Exclusiones (lista de días con mes, año opcional)
El algoritmo para determinar si un día pertenece a un calendario sigue estas reglas por orden:
- Si el día cumple una inclusión, el día pertenece.
- Si el día es antes del inicio o es después del fin, el día no pertenece. (Si no hay año definido, el año será el del día).
- Si hay calendario padre y el día no pertenece al calendario padre, el día no pertenece a este calendario.
- Si el día o mes no está en la lista de días de la semana o meses, el día no pertenece.
- Si el día cumple alguna exclusión, el día no pertenece.
- Si no se cumple ninguna regla anterior, el día pertenece.
Eventos periódicos
Los eventos periódicos se disparan en rangos de tiempo iguales. El parámetro Dispara cada define cada cuanto se dispara el evento, contiene un desplegable para elegir la unidad de tiempo.
Los eventos periódicos tienen un nombre que los diferencia entre sí.
Eventos programados
Un evento programado se dispara cada vez que la hora local cumple las reglas establecidas. Permite para lanzar eventos periódicos con reglas más complejas que un periodo fijo.
Por ejemplo, se podría especificar un evento programado para el segundo 0 de cada minuto, de forma que se sabe con certeza que será disparado cada minuto pero sincronizado con el cambio.
Los eventos programados pueden estar vinculados a un calendario, por ejemplo, se podría crear un evento de tipo "apertura" a las 8:00 de todos los días, pero restringido a un calendario que solo incluyese de lunes a viernes y excluyese días festivos.
Los eventos programados pueden tener una duración, en cuyo caso se genera un evento de desactivación una vez ha transcurrido esa duración desde el inicio.
Para detectar y manejar el caso de que un corte del sistema (reinicio programado, corte de corriente, avería...) impida lanzar el evento de fin, se dispone de una configuración de reinicio. La configuración de disparar en reinicio puede tener tres valores:
- No: no disparar nunca cuando inicia el sistema
- Siempre: disparar siempre que se inicia el sistema un evento, éste será de inicio si está dentro de la duración del evento (reglas de tiempo y duración) o de fin de lo contrario
- Cuando haya cambio de estado: disparar solo si la programación implica que se debería haber disparado antes y dada la duración todavía no se habría disparado el fin de este evento
Hay dos modos de definir la programación de este tipo de eventos.
Nomenclatura similar a CRON
Una cadena cron tiene 5 ó 6 campos, separados por espacios. Cada campo de la regla puede ser un número, una lista de números, un rango (dos números separados por guión) o un asterisco, el asterisco representa a todos los números posibles.
El orden de los campos es el siguiente (de izquierda a derecha):
- Segundos (solo si hay 6 campos, si no el campo omitido es este. Si se omite se asume valor 0)
- Minutos
- Horas
- Día del mes
- Número de mes, se permite número o nombre en inglés (
January,February...; abreviaciones de tres letras:Jan,Feb...) - Día de la semana (0 y 7 corresponden al domingo), se permiten nombres en inglés (
monday,tuesday...; abreviaciones de tres letras:mon,tue...)
Por ejemplo 0 * 1-5 2 3 sería la regla que se dispararía cuando fuese cualquier hora en punto (minuto 0, hora *) de los días 1 al 5 del mes, solo en Febrero y cuando el día sea miércoles (día 3 de la semana).
Nota: El interfaz web no incluye ninguna alerta ni aviso si la regla cron especificada no es válida.
Definiendo campos
Si no se marca la nomenclatura CRON, se podrán especificar los campos equivalentes en el formulario. Se permite insertar múltiples datos numéricos separados por coma, no se permiten rangos ni nombres en inglés.
Nota: Por consistencia y para evitar errores habituales, si las horas están especificadas pero los minutos no, se establece el campo minutos a 0 automáticamente. Igualmente, si los minutos están establecidos (incluso si lo están por la regla anterior) y los segundos no, se establecen a 0 los segundos. De esta forma se evita tener por error reglas que disparen cada segundo sin ser la intención original del usuario.
Reaccionando a los eventos
La reacción de los eventos se especifica en los scripts. Para ver cómo manejar estos eventos y otros propios del funcionamiento de