Cómo programar tareas con una sola línea usando iris-cron-task
¡Hola desarrolladores!
Algunas veces necesito planificar una tarea por medio de un programa.
Y en el 99% de los casos necesito que algún método de clase sea llamado periódicamente.
Y quiero que la tarea programada comience con una línea. Como un trabajo en crontab.
Decidí incorporar un módulo de este tipo con el módulo iris-cron-task.
Os comento los detalles a continuación.
Instala el módulo utilizando:
USER>zpm "install iris-cron-task"
Entonces podrás programar tareas con una sola línea.
Por ejemplo, si quiero ejecutar el siguiente comando
set ^A($I(^A))=$H
para que se inicie cada minuto, puedo llamar al siguiente comando:
zw ##class(dc.cron.task).Start("Task name","* * * * *","set ^A($I(^A))=$H",1,.taskid)
Esto creará una tarea con un taskid que se ejecutará cada minuto.
Cuando ya no necesites la tarea, puedes eliminarla con:
zw ##class(dc.cron.task).Kill(taskid)
Hice que fuera compatible con algunas configuraciones de cron, como cada minuto:
* * * * *
cada hora:
0 * * * *
y cada día a una hora determinada:
0 0 * * *
Puedes encontrar útil la aplicación cronmaker, para obtener la expresión cron para usarla en cualquier horario que necesites.
Gracias a @Lorenzo Scalese por haber presentado el soporte para una expresión cron arbitraria.
Espero que os guste.
¡Cualquier comentario es bienvenido!