cron es una herramienta sólida para ejecutar trabajos (funciones o comandos) en programaciones definidas utilizando la sintaxis cron.
¡Perfecto para tareas como copias de seguridad de datos, notificaciones y muchas más!
ejecutar una función cada vez que se active su trabajo programado
ejecutar un trabajo externo al proceso de JavaScript (como un comando del sistema) usando child_process
use un objeto Date o Luxon DateTime en lugar de la sintaxis cron como activador de su devolución de llamada
use una ranura adicional durante segundos (si la deja desactivada, el valor predeterminado será 0 y coincidirá con el comportamiento de Unix)
npm instala cron
Características
Instalación
Migrar de v2 a v3
Uso básico
Patrones cron
Descripción general de la sintaxis de Cron
Rangos admitidos
Problemas
API
Funciones independientes
Clase de trabajo cron
Clase de tiempo cron
Comunidad
Únete a la comunidad
Contribuyendo
Contribución General
Envío de errores/problemas
Expresiones de gratitud
Licencia
Con la introducción de TypeScript en la versión 3 y la alineación con los patrones cron de UNIX, se han realizado algunos cambios:
Indexación de meses: cambió de 0-11
a 1-12
. Por lo tanto, debe incrementar todos los meses numéricos en 1.
Indexación de día de la semana: se agregó soporte para 7
como domingo.
CronJob
El constructor ya no acepta un objeto como su primer y único parámetro. Utilice CronJob.from(argsObject)
en su lugar.
Las devoluciones de llamada ahora se realizan en el orden en que se registraron.
nextDates(count?: number)
ahora siempre devuelve una matriz (vacía si no se proporciona ningún argumento). Utilice nextDate()
en su lugar para una sola fecha.
se eliminó el método job()
en favor del new CronJob(...args)
/ CronJob.from(argsObject)
se eliminó el método time()
a favor del new CronTime()
importar { CronJob } desde 'cron';const job = new CronJob('* * * * * *', // cronTimefunction () {console.log('Verás este mensaje cada segundo');}, // onTicknull , // onCompletetrue, // start'America/Los_Angeles' // timeZone);// job.start() es opcional aquí debido al cuarto parámetro establecido en verdadero.
// trabajo equivalente usando el método estático "from", proporcionando parámetros como un objetoconst job = CronJob.from({cronTime: '* * * * * *',onTick: function () {console.log('Verás esto mensaje cada segundo');},start: true,timeZone: 'America/Los_Angeles'});
Nota: En el primer ejemplo anterior, el cuarto parámetro de
CronJob()
inicia el trabajo automáticamente. Si no se proporciona o se establece en false, debe iniciar explícitamente el trabajo usandojob.start()
.
Para ejemplos más avanzados, consulte el directorio de ejemplos.
Los patrones cron son la columna vertebral de esta biblioteca. Familiarízate con la sintaxis:
- `*` Asterisks: Any value - `1-3,5` Ranges: Ranges and individual values - `*/2` Steps: Every two units
Los patrones detallados y las explicaciones están disponibles en crontab.org. Los ejemplos en el enlace tienen cinco campos y 1 minuto como la granularidad más fina, pero nuestra programación cron admite un formato mejorado con seis campos, lo que permite una precisión de segundo nivel. Herramientas como crontab.guru pueden ayudar a construir patrones, pero recuerde tener en cuenta el campo de segundos.
Aquí hay una referencia rápida al formato UNIX Cron que utiliza esta biblioteca, además de un segundo campo agregado:
field allowed values ----- -------------- second 0-59 minute 0-59 hour 0-23 day of month 1-31 month 1-12 (or names, see below) day of week 0-7 (0 or 7 is Sunday, or use names)
También se pueden utilizar nombres para los campos "mes" y "día de la semana". Utilice las primeras tres letras del día o mes en particular (no importa el caso). Se permiten rangos y listas de nombres.
Ejemplos: "lunes, miércoles, viernes", "enero-marzo".
Tanto los objetos JS Date
como Luxon DateTime
no garantizan una precisión de milisegundos debido a retrasos en el cálculo. Este módulo excluye la precisión de milisegundos para la sintaxis cron estándar, pero permite la especificación de la fecha de ejecución a través de objetos JS Date
o Luxon DateTime
. Sin embargo, es posible que especificar un tiempo de ejecución futuro preciso, como agregar un milisegundo al tiempo actual, no siempre funcione debido a estos retrasos en el cálculo. Se ha observado que retrasos inferiores a 4-5 ms pueden provocar inconsistencias. Si bien podríamos limitar la granularidad de todas las fechas a segundos, hemos optado por permitir una mayor precisión pero avisar a los usuarios sobre posibles problemas.
El uso de funciones de flecha para onTick
las vincula al contexto this
del padre. Como resultado, no tendrán acceso a this
contexto del cronjob. Puedes leer un poco más en el número 47 (comentario).
sendAt
: Indica cuándo se ejecutará un CronTime
(devuelve un objeto Luxon DateTime
).
import * as cron from 'cron';const dt = cron.sendAt('0 0 * * *');console.log(`El trabajo se ejecutaría en: ${dt.toISO()}`);
timeout
: Indica el número de milisegundos en el futuro en el que se ejecutará un CronTime
(devuelve un número).
importar * como cron desde 'cron';const timeout = cron.timeout('0 0 * * *');console.log(`El trabajo se ejecutaría en ${timeout}ms`);
constructor(cronTime, onTick, onComplete, start, timeZone, context, runOnInit, utcOffset, unrefTimeout)
:
cronTime
: [OBLIGATORIO] - El tiempo para finalizar su trabajo. Puede ser sintaxis cron, un objeto JS Date
o un objeto Luxon DateTime
.
onTick
: [REQUERIDO] - Función para ejecutar en el momento especificado. Si se proporcionó una devolución de llamada onComplete
, onTick
la recibirá como argumento.
onComplete
: [OPCIONAL]: se invoca cuando el trabajo se detiene con job.stop()
. También podría ser activado por onTick
después de su ejecución.
start
: [OPCIONAL] - Determina si el trabajo debe comenzar antes de que salga el constructor. El valor predeterminado es false
.
timeZone
: [OPCIONAL] - Establece la zona horaria de ejecución. La hora predeterminada es la hora local. Consulte formatos válidos en la documentación de Luxon.
context
: [OPCIONAL] - Contexto de ejecución para el método onTick.
runOnInit
: [OPCIONAL] - Activa instantáneamente la función onTick
después de la inicialización. El valor predeterminado es false
.
utcOffset
: [OPCIONAL] - Especifica el desplazamiento de la zona horaria en minutos. No puede coexistir con timeZone
.
unrefTimeout
: [OPCIONAL] - Útil para controlar el comportamiento del bucle de eventos. Más detalles aquí.
from
(estático): crea un nuevo objeto CronJob que proporciona argumentos como un objeto. Consulte los nombres y descripciones de los argumentos más arriba.
start
: inicia el trabajo.
stop
: detiene el trabajo.
setTime
: Modifica la hora del CronJob
. El parámetro debe ser CronTime
.
lastDate
: proporciona la última fecha de ejecución.
nextDate
: Indica la fecha posterior que activará un onTick
.
nextDates(count)
: proporciona una serie de fechas próximas que iniciarán un onTick
.
fireOnTick
: permite modificar el comportamiento de llamada onTick
.
addCallback
: permite agregar devoluciones de llamada onTick
.
constructor(time, zone, utcOffset)
:
time
: [OBLIGATORIO] - La hora para iniciar su trabajo. Acepta sintaxis cron o un objeto JS Date.
zone
: [OPCIONAL] - Equivalente a timeZone
de los parámetros CronJob
.
utcOffset
: [OPCIONAL] - Análogo a utcOffset
de los parámetros CronJob
.
¡Únete al servidor de Discord! Aquí puede discutir problemas y obtener ayuda en un foro más informal que GitHub.
¡Este proyecto busca ayuda! Si está interesado en ayudar con el proyecto, eche un vistazo a nuestra documentación de contribución.
Eche un vistazo a nuestra documentación de contribución, contiene toda la información que necesita saber antes de enviar un problema.
Este es un proyecto de esfuerzo comunitario. En el sentido más estricto, este proyecto comenzó como un proyecto de código abierto de cron.js y creció hasta convertirse en algo más. Otras personas han contribuido con código, tiempo y supervisión al proyecto. En este punto hay demasiados para nombrarlos aquí, así que simplemente diremos gracias.
Un agradecimiento especial a Hiroki Horiuchi, Lundarl Gholoi y koooge por su trabajo en los tipos DefinitelyTyped antes de que se importaran en la versión 2.4.0.
MIT