Maison >développement back-end >tutoriel php >Framework-AGNOSTIC PHP CRONJOBS Rendu facile avec Crunz!
Cet article présente Crunz, une bibliothèque de planification de travail PHP polyvalente. Inspiré par le planificateur de tâches de Laravel, Crunz offre une flexibilité accrue et une facilité d'utilisation pour gérer les travaux Cron. L'auteur accueille les contributions et les commentaires.
Une solide compréhension des travaux de cron est supposée. Reportez-vous à la procédure fournie si nécessaire.
Caractéristiques de clé:
daily()
, everyFiveMinutes()
). from()
, to()
, between()
, when()
, et skip()
pour gérer l'exécution des tâches. PRENDRE:
Installer via Composer:
<code class="language-bash">composer require lavary/crunz</code>
A crunz
L'utilitaire de ligne de commande sera disponible.
comment cela fonctionne:
Définissez les travaux CRON dans des fichiers PHP (par exemple, dans un répertoire tasks/
) à l'aide de l'interface Crunz, au lieu de directement dans un fichier crontab
. Un seul travail CRON (exécutant chaque minute) délève l'exécution au coureur d'événement de Crunz:
<code class="language-bash">* * * * * /project/vendor/bin/crunz schedule:run</code>
schedule:run
gère l'exécution de la tâche basée sur les horaires définis.
Création de fichiers de tâche:
Les fichiers de tâche (se terminant conventionnellement dans Tasks.php
) contiennent des définitions de tâches. Crunz scanne le répertoire tasks/
récursivement. Vous pouvez spécifier le répertoire des tâches via des arguments de configuration ou de ligne de commande.
Exemple de tâche:
<code class="language-php"><?php // tasks/MyTasks.php use Crunz\Schedule; $schedule = new Schedule(); $schedule->run('my_command') ->daily() ->description('My daily task.'); return $schedule;</code>
N'oubliez pas de renvoyer l'objet $schedule
.
Commandes et fermetures:
run()
Accepte les commandes ou les fermetures PHP:
<code class="language-php">$schedule->run('/usr/bin/my_script.sh', ['--option' => 'value']) ->hourly(); $schedule->run(function () { /* code */ }) ->everyTenMinutes();</code>
Modifications du répertoire: Utilisez in()
pour modifier le répertoire de travail avant l'exécution de la tâche.
Options de planification:
hourly()
, daily()
, weekly()
, monthly()
, quarterly()
, yearly()
. everyFiveMinutes()
, everyTwelveHours()
, etc. on('14:00 2025-03-15')
, at('14:00')
, dailyAt('14:00')
. mondays()
, tuesdays()
, etc. (utilisez avec d'autres méthodes de fréquence). cron('30 12 * * 1')
. Durée de vie de la tâche: from()
, to()
, between()
Période d'exécution de la tâche de contrôle.
Exécution conditionnelle: when()
et skip()
Les méthodes permettent l'exécution de la tâche conditionnelle basée sur les rappels.
Configuration (YAML): A crunz.yaml
Le fichier (publié à l'aide de crunz publish:config
) permet la personnalisation du répertoire source, du suffixe de fichiers, de la journalisation et des notifications par e-mail.
Parallélisme et verrouillage: Crunz exécute des tâches en parallèle en utilisant symfony/Process
. preventOverlapping()
empêche les courses qui se chevauchent.
Gestion des sorties et des erreurs: Log Sortie et erreurs dans les fichiers (configurer dans crunz.yaml
) ou envoyer par e-mail. onError()
Les rappels gèrent les erreurs.
Hooks pré / post-processus: before()
et after()
Les rappels permettent l'exécution du code avant et après les tâches.
Utilitaires de ligne de commande: crunz schedule:list
répertorie les tâches; crunz make:task
crée des squelettes de fichiers de tâche.
Interface Web: Envisagez d'utiliser lavary/crunz-ui
(une interface basée sur Laravel) pour une solution de gestion basée sur le Web.
Conclusion:
Gérer les travaux CRON dans votre base de code offre un contrôle de version et une collaboration plus facile. Crunz simplifie considérablement ce processus.
Questions fréquemment posées (FAQ): (Les FAQ d'origine sont déjà bien écrites et ne nécessitent pas de modification significative pour cette réécriture.)
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!