Componente de Tareas Programadas Crontab
Descripción
workerman/crontab
es similar a crontab de Linux, pero a diferencia de workerman/crontab
, soporta la programación a nivel de segundos.
Descripción del tiempo:
0 1 2 3 4 5
| | | | | |
| | | | | +------ día de la semana (0 - 6) (Domingo=0)
| | | | +------ mes (1 - 12)
| | | +-------- día del mes (1 - 31)
| | +---------- hora (0 - 23)
| +------------ min (0 - 59)
+-------------- sec (0-59)[opcional, si no hay el campo de 0, la menor granularidad de tiempo es el minuto]
Dirección del Proyecto
https://github.com/walkor/crontab
Instalación
composer require workerman/crontab
Uso
Paso 1: Crear el archivo del proceso app/process/Task.php
<?php
namespace app\process;
use Workerman\Crontab\Crontab;
class Task
{
public function onWorkerStart()
{
// Ejecutar cada segundo
new Crontab('*/1 * * * * *', function(){
echo date('Y-m-d H:i:s')."\n";
});
// Ejecutar cada 5 segundos
new Crontab('*/5 * * * * *', function(){
echo date('Y-m-d H:i:s')."\n";
});
// Ejecutar cada minuto
new Crontab('0 */1 * * * *', function(){
echo date('Y-m-d H:i:s')."\n";
});
// Ejecutar cada 5 minutos
new Crontab('0 */5 * * * *', function(){
echo date('Y-m-d H:i:s')."\n";
});
// Ejecutar en el primer segundo de cada minuto
new Crontab('1 * * * * *', function(){
echo date('Y-m-d H:i:s')."\n";
});
// Ejecutar a las 7:50 AM cada día, nota: en este caso se omitió el campo de segundos
new Crontab('50 7 * * *', function(){
echo date('Y-m-d H:i:s')."\n";
});
}
}
Paso 2: Configurar el archivo de proceso para que se inicie con webman
Abra el archivo de configuración config/process.php
y añada la siguiente configuración
return [
....otras configuraciones, se omite aquí....
'task' => [
'handler' => app\process\Task::class
],
];
Paso 3: Reiniciar webman
Nota: las tareas programadas no se ejecutarán inmediatamente, todas las tareas programadas comenzarán a contar en el próximo minuto.
Descripción
Crontab no es asíncrono; por ejemplo, si un proceso de tarea tiene configurados dos temporizadores A y B, ambos ejecutan tareas cada segundo, pero si la tarea A tarda 10 segundos, entonces B tendrá que esperar a que A se complete para ser ejecutado, lo que resulta en un retraso en la ejecución de B.
Si los intervalos de tiempo son muy sensibles para el negocio, se recomienda ejecutar las tareas programadas sensibles en un proceso separado para evitar que sean afectadas por otras tareas programadas. Por ejemplo, en config/process.php
se puede hacer la siguiente configuración
return [
....otras configuraciones, se omite aquí....
'task1' => [
'handler' => process\Task1::class
],
'task2' => [
'handler' => process\Task2::class
],
];
Coloque las tareas programadas sensibles al tiempo en process/Task1.php
y las otras tareas programadas en process/Task2.php
.
Para más explicaciones sobre la configuración de config/process.php
, consulte Procesos Personalizados