Composant de tâches cron crontab
Description
workerman/crontab
est similaire à crontab de Linux, la différence est que workerman/crontab
prend en charge la planification au niveau de la seconde.
Description du temps :
0 1 2 3 4 5
| | | | | |
| | | | | +------ jour de la semaine (0 - 6) (Dimanche=0)
| | | | +------ mois (1 - 12)
| | | +-------- jour du mois (1 - 31)
| | +---------- heure (0 - 23)
| +------------ minute (0 - 59)
+-------------- seconde (0-59)[peut être omise, si le champ des secondes est absent, la granularité de temps minimale est la minute]
Adresse du projet
https://github.com/walkor/crontab
Installation
composer require workerman/crontab
Utilisation
Étape 1 : Créer le fichier de processus app/process/Task.php
<?php
namespace app\process;
use Workerman\Crontab\Crontab;
class Task
{
public function onWorkerStart()
{
// Exécuter toutes les secondes
new Crontab('*/1 * * * * *', function(){
echo date('Y-m-d H:i:s')."\n";
});
// Exécuter toutes les 5 secondes
new Crontab('*/5 * * * * *', function(){
echo date('Y-m-d H:i:s')."\n";
});
// Exécuter toutes les minutes
new Crontab('0 */1 * * * *', function(){
echo date('Y-m-d H:i:s')."\n";
});
// Exécuter toutes les 5 minutes
new Crontab('0 */5 * * * *', function(){
echo date('Y-m-d H:i:s')."\n";
});
// Exécuter à la première seconde de chaque minute
new Crontab('1 * * * * *', function(){
echo date('Y-m-d H:i:s')."\n";
});
// Exécuter à 7h50 chaque jour, notez que la partie secondes est omise ici
new Crontab('50 7 * * *', function(){
echo date('Y-m-d H:i:s')."\n";
});
}
}
Étape 2 : Configurer le fichier de processus pour qu'il démarre avec webman
Ouvrez le fichier de configuration config/process.php
, et ajoutez la configuration suivante
return [
....autres configurations, ceci est omis....
'task' => [
'handler' => app\process\Task::class
],
];
Étape 3 : Redémarrer webman
Attention : Les tâches cron ne s'exécutent pas immédiatement, toutes les tâches cron commenceront à être chronométrées à partir de la minute suivante.
Remarque
crontab n'est pas asynchrone, par exemple si un processus de tâche configure deux minuteries A et B, qui exécutent toutes deux des tâches chaque seconde, mais si la tâche A prend 10 secondes, alors B devra attendre que A soit terminé avant d'être exécutée, ce qui entraîne un retard pour B.
Si votre activité est très sensible aux intervalles de temps, il est nécessaire de placer les tâches cron sensibles dans un processus séparé pour éviter qu'elles ne soient affectées par d'autres tâches cron. Par exemple, pour la configuration suivante dans config/process.php
:
return [
....autres configurations, ceci est omis....
'task1' => [
'handler' => process\Task1::class
],
'task2' => [
'handler' => process\Task2::class
],
];
Placez les tâches cron sensibles au temps dans process/Task1.php
, tandis que les autres tâches cron se trouvent dans process/Task2.php
.
Pour plus d’informations sur la configuration de config/process.php
, veuillez vous référer à Personnaliser les processus