Lors du développement d'applications Laravel, nous utilisons souvent la commande artisan pour effectuer diverses tâches. La commande artisan est un outil de ligne de commande très puissant fourni par le framework Laravel. Il aide les développeurs à simplifier l'exécution de nombreuses tâches, telles que la migration de la base de données, le traitement des files d'attente, les tâches de synchronisation, etc.
Cependant, lorsque nous exécutons des commandes artisanales de longue durée, il peut y avoir plusieurs commandes s'exécutant simultanément en arrière-plan. Pour distinguer ces processus, en particulier lorsque vous utilisez des outils de surveillance de processus tels que les commandes HTOP ou PS , nous voulons pouvoir définir un titre de processus dynamique facilement reconnaissable pour chaque processus. Heureusement, nous pouvons y parvenir via la fonction CLI_GET_PROCESS_TITLE de PHP.
Dans cet article, nous explorerons comment ajouter des titres de processus dynamiques basés sur la fonction CLI_GET_PROCESS_TITLE à la commande Laravel Artisan pour faciliter la visualisation et l'identification de différents processus dans l'interface de ligne de commande.
CLI_GET_PROCESS_TITLE est une fonction PHP qui obtient le titre du processus PHP actuel. Il renvoie une chaîne représentant le nom d'affichage du processus actuel dans le système d'exploitation. En modifiant ce titre, nous pouvons laisser le processus afficher un nom plus descriptif dans l'interface de ligne de commande, ce qui nous aide à mieux gérer et surveiller les processus.
Par défaut, le titre du processus PHP est généralement "PHP" ou un identifiant générique similaire, mais avec CLI_GET_PROCESS_TITLE , nous pouvons le changer en un nom plus reconnaissable, tel que la commande Laravel Artisan en cours d'exécution.
Afin de définir des titres de processus dynamiques pour la commande artisan de Laravel, nous devons modifier le titre de processus lors de l'exécution de la commande. Voici un guide d'étape simple:
Tout d'abord, nous devons créer une commande artisanale personnalisée. Vous pouvez créer une nouvelle commande d'artisan en exécutant:
<span><span>php artisan make:</span><span><span class="hljs-built_in">command</span></span><span> SetProcessTitleCommand
</span></span>
Cela générera un nouveau fichier de classe de commande setProcessTitleCommand.php dans le répertoire App / Console / Commandes .
Ensuite, nous devons utiliser la fonction CLI_SET_PROCESS_TITLE dans la classe de commande pour définir le titre de processus. Ouvrez le fichier setProcessTitleCommand.php et ajoutez du code dans la méthode de poignée pour définir dynamiquement le titre de processus.
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-keyword">namespace</span></span><span> </span><span><span class="hljs-title class_">App</span></span><span>\</span><span><span class="hljs-title class_">Console</span></span><span>\</span><span><span class="hljs-title class_">Commands</span></span><span>;
</span><span><span class="hljs-keyword">use</span></span><span> </span><span><span class="hljs-title">Illuminate</span></span><span>\</span><span><span class="hljs-title">Console</span></span><span>\</span><span><span class="hljs-title">Command</span></span><span>;
</span><span><span class="hljs-class"><span class="hljs-keyword">class</span></span></span><span> </span><span><span class="hljs-title">SetProcessTitleCommand</span></span><span> </span><span><span class="hljs-keyword">extends</span></span><span> </span><span><span class="hljs-title">Command</span></span><span>
{
</span><span><span class="hljs-comment">// Le nom de la commande</span></span><span>
</span><span><span class="hljs-keyword">protected</span></span><span> </span><span><span class="hljs-variable">$signature</span></span><span> = </span><span><span class="hljs-string">'set:process-title {title}'</span></span><span>;
</span><span><span class="hljs-comment">// Description de la commande</span></span><span>
</span><span><span class="hljs-keyword">protected</span></span><span> </span><span><span class="hljs-variable">$description</span></span><span> = </span><span><span class="hljs-string">'Définissez le titre du processus actuel'</span></span><span>;
</span><span><span class="hljs-comment">// Méthodes pour exécuter les commandes</span></span><span>
</span><span><span class="hljs-keyword">public</span></span><span> </span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">handle</span></span><span>(</span><span><span class="hljs-params"></span></span><span>)
{
</span><span><span class="hljs-comment">// Obtenez des paramètres de ligne de commande</span></span><span>
</span><span><span class="hljs-variable">$title</span></span><span> = </span><span><span class="hljs-variable language_">$this</span></span><span>-></span><span><span class="hljs-title function_ invoke__">argument</span></span><span>(</span><span><span class="hljs-string">'title'</span></span><span>);
</span><span><span class="hljs-comment">// utilisercli_set_process_titleDéfinir le titre du processus</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">function_exists</span></span><span>(</span><span><span class="hljs-string">'cli_set_process_title'</span></span><span>)) {
</span><span><span class="hljs-title function_ invoke__">cli_set_process_title</span></span><span>(</span><span><span class="hljs-variable">$title</span></span><span>);
</span><span><span class="hljs-variable language_">$this</span></span><span>-></span><span><span class="hljs-title function_ invoke__">info</span></span><span>(</span><span><span class="hljs-string">"Le titre du processus a été défini sur: <span class="hljs-subst">$title</span></span></span><span>");
} </span><span><span class="hljs-keyword">else</span></span><span> {
</span><span><span class="hljs-variable language_">$this</span></span><span>-></span><span><span class="hljs-title function_ invoke__">error</span></span><span>(</span><span><span class="hljs-string">'actuelPHPVersion non prise en chargecli_set_process_titlefonction'</span></span><span>);
}
}
}
</span></span>
Dans le code ci-dessus, nous avons fait ce qui suit:
Un nouvel ensemble de commandes d'artisan: Process-titre est créé, qui accepte un titre de paramètre de ligne de commande, qui est le titre que nous voulons définir pour le processus.
Dans la méthode Handle , nous utilisons CLI_SET_PROCESS_TITLE pour définir dynamiquement le titre de processus.
Si la fonction CLI_SET_PROCESS_TITLE n'est pas disponible (par exemple, l'environnement PHP ne prend pas en charge cette fonction), l'utilisateur sera invité à ce que l'environnement actuel ne prenne pas en charge la fonction.
Ensuite, nous devons enregistrer cette nouvelle commande dans le fichier app / console / kernel.php . Ajoutez une référence à la nouvelle commande dans le tableau des commandes $ :
<span><span><span class="hljs-keyword">protected</span></span><span> </span><span><span class="hljs-variable">$commands</span></span><span> = [
</span><span><span class="hljs-title class_">Commands\SetProcessTitleCommand</span></span><span>::</span><span><span class="hljs-variable language_">class</span></span><span>,
];
</span></span>
Nous pouvons maintenant tester les paramètres du titre de processus en exécutant la commande suivante:
<span><span>php artisan </span><span><span class="hljs-built_in">set</span></span><span>:process-title </span><span><span class="hljs-string">"My Custom Process Title"</span></span><span>
</span></span>
Si tout fonctionne bien, vous pouvez afficher le titre de processus via la commande PS du système ou des outils similaires. Vous devriez être en mesure de voir que le titre du processus a été défini avec succès sur " Mon titre de processus personnalisé ".
Si vous devez mettre à jour le titre de processus dynamiquement dans les commandes à long terme, vous pouvez appeler périodiquement CLI_SET_PROCESS_TITLE pendant l'exécution de la commande. Par exemple, lors du traitement d'une file d'attente de tâches, vous souhaiterez peut-être mettre à jour dynamiquement le titre de processus en fonction de la tâche actuellement traitée.
Voici un exemple montrant comment mettre à jour dynamiquement les titres de processus lors de l'exécution d'une longue commande en cours d'exécution:
<span><span><span class="hljs-keyword">public</span></span><span> </span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">handle</span></span><span>(</span><span><span class="hljs-params"></span></span><span>)
{
</span><span><span class="hljs-variable">$tasks</span></span><span> = </span><span><span class="hljs-variable language_">$this</span></span><span>-></span><span><span class="hljs-title function_ invoke__">getTasks</span></span><span>(); </span><span><span class="hljs-comment">// Supposons que vous obteniez un ensemble de tâches</span></span><span>
</span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$tasks</span></span><span> </span><span><span class="hljs-keyword">as</span></span><span> </span><span><span class="hljs-variable">$index</span></span><span> => </span><span><span class="hljs-variable">$task</span></span><span>) {
</span><span><span class="hljs-variable">$title</span></span><span> = </span><span><span class="hljs-string">"Manipuler les tâches <span class="hljs-subst">$index</span></span></span><span> / " . </span><span><span class="hljs-title function_ invoke__">count</span></span><span>(</span><span><span class="hljs-variable">$tasks</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">function_exists</span></span><span>(</span><span><span class="hljs-string">'cli_set_process_title'</span></span><span>)) {
</span><span><span class="hljs-title function_ invoke__">cli_set_process_title</span></span><span>(</span><span><span class="hljs-variable">$title</span></span><span>);
}
</span><span><span class="hljs-comment">// Manipuler les tâches</span></span><span>
</span><span><span class="hljs-variable language_">$this</span></span><span>-></span><span><span class="hljs-title function_ invoke__">processTask</span></span><span>(</span><span><span class="hljs-variable">$task</span></span><span>);
</span><span><span class="hljs-comment">// Pour afficher l'effet,Simulons le temps de traitement de chaque tâche ici</span></span><span>
</span><span><span class="hljs-title function_ invoke__">sleep</span></span><span>(</span><span><span class="hljs-number">1</span></span><span>);
}
}
</span></span>
Dans le code ci-dessus, la commande traverse un ensemble de tâches et met à jour le titre de processus dynamiquement au fur et à mesure que chaque tâche est traitée. De cette façon, vous pouvez voir l'état du processus actuel en temps réel sur la ligne de commande.
Grâce aux fonctions CLI_GET_PROCESS_TITLE et CLI_SET_PROCESS_TITLE , nous pouvons définir des titres de processus dynamiques pour les commandes artisanales de Laravel. Cela est très utile pour différencier différents processus lors de l'exécution de plusieurs processus d'arrière-plan sur la ligne de commande, en particulier lors de l'utilisation de commandes de longue durée dans les environnements de développement et de production.
Bien que la fonction CLI_SET_PROCESS_TITLE ne soit pas prise en charge par toutes les versions PHP, c'est un outil très utile pour les développeurs qui ont besoin de gestion et de surveillance des processus. J'espère que cet article vous aidera à mettre en œuvre cette fonctionnalité dans votre projet Laravel, en améliorant l'efficacité du travail et l'expérience de gestion du système.