Necesitamos ampliar las funciones del cron para cumplir con estos objetivos:
Necesitamos ofrecer más variedad de plazos de ejecución para los cronjobs, no sólo cada x tiempo, sino también en horarios concretos, por ejemplo:
Ahora mismo tenemos una única función, isTimeForJob(), donde indicamos el nombre del trabajo y el periodo y nos devuelve true si ya toca ejecutar. Podemos añadir varias funciones auxiliares para esto:
$job = $this->job('MiCronJob');
// cada día a las 02h o posterior (si no se ha ejecutado hoy)
$job->everyDayAt(2)->run(function () {
// código a ejecutar
});
// cada día a las 02h y solamente a las 02h. Comprobación estricta.
$job->everyDayAt(2, true)->run(function () {
// código a ejecutar
});
// cada lunes a las 08h o posterior
$job->everyMondayAt(8)->run(function () {
// código a ejecutar
});
// cada lunes a las 08h y solamente el lunes a las 08h. Comprobación estricta.
$job->everyMondayAt(8, true)->run(function () {
// código a ejecutar
});
// cada día 1 a las 08h o posterior
$job->everyDay(1, 8)->run(function () {
// código a ejecutar
});
// cada último día del mes a las 19h o posterior
$job->everyLastDayOfMonthAt(19)->run(function () {
// código a ejecutar
});
En ocasiones queremos cambiar la frecuencia de ejecución para una instalación concreta. Deberíamos poder hacer esto desde el EditCronJob, poder marcar periodo personalizado e indicar el periodo (nueva columna de texto) o seleccionar un periodo de una lista (cada día, cada lunes, cada martes..., cada primero de mes, cada final de mes) y la hora seleccionada.
$this->job('MiCronJob')->everyDayAt(2)->orCustomFrequence()->run(function () {
// código a ejecutar
});
El controlador que ejecuta los cronjobs debe manejar los errores, de forma que un problema con un cronjob no detenga toda la ejecución.
España, 11 años, nivel 100
Fecha de inicio: 09-06-2023, Fecha de fin: 20-11-2023, Puntos de soporte +25
PRO |
08-06-2023 20:07:44 mariano_6807 Yo lo veo útil sobre todo para los plugins que se automatizan en crontab, hay algunos que los podria ejecutar una vez al dia y los demas cada dos horas por ejemplo |
|
02-08-2023 17:25:10 daniel89fg_739 Al instalar o activar un plugin ejecutar el cron como última instancia. La idea es que se guarden los crons disponibles de ese plugin en la pestaña de crons. De este modo al instalar o activar el plugin, el usuario verá los crons disponibles de ese plugin, y sit iene el plugin de Notificaciones podrá suscribirse directamente a ese cron sin tener que esperar a su ejecución periódica. |
PRO |
20-11-2023 11:45:24 neorazorx_1 ENVIADA |