Composant de tâches planifiées Crontab
workerman/crontab
Description
workerman/crontab
est similaire à crontab sur Linux, mais la différence est que workerman/crontab
supporte la planification jusqu'à 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 omis, si la première position est absente, la plus petite unité de temps est la minute]
Adresse du projet
https://github.com/walkor/crontab
Installation
composer require workerman/crontab
Utilisation
Étape 1 : Créer un fichier de processus process/Task.php
<?php
namespace 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 tous les jours, veuillez noter que la position de la seconde a été omise ici
new Crontab('50 7 * * *', function(){
echo date('Y-m-d H:i:s')."\n";
});
}
}
Étape 2 : Configurer le fichier de processus pour démarrer avec webman
Ouvrez le fichier de configuration config/process.php
et ajoutez la configuration suivante :
return [
....autres configurations, ici omises....
'task' => [
'handler' => process\Task::class
],
];
Étape 3 : Redémarrer webman
Remarque : les tâches planifiées ne s'exécuteront pas immédiatement, toutes les tâches planifiées commenceront à être exécutées lorsque la prochaine minute commencera.
Remarque
Crontab n'est pas asynchrone. Par exemple, un processus de tâche définit deux minuteries A et B, toutes deux exécutent une tâche toutes les secondes, mais si la tâche A prend 10 secondes, alors la tâche B doit attendre que la tâche A soit terminée avant de s'exécuter, ce qui entraîne un retard dans l'exécution de la tâche B.
Si la sensibilité à l'intervalle de temps est importante pour l'activité, il est nécessaire d'exécuter les tâches planifiées très sensibles dans des processus séparés pour éviter l'impact d'autres tâches planifiées. Par exemple, dans config/process.php
, faites la configuration suivante :
return [
....autres configurations, ici omises....
'task1' => [
'handler' => process\Task1::class
],
'task2' => [
'handler' => process\Task2::class
],
];
Placez les tâches planifiées sensibles au temps dans le fichier process/Task1.php
, et les autres tâches planifiées dans le fichier process/Task2.php
.
Plus d'informations
Pour plus d'informations sur la configuration de config/process.php
, veuillez consulter Processus personnalisé