Sites web
Configuration et gestion des tâches cron
A cron job runs a command on a schedule, in the background, whether or not anyone is visiting your site. This guide covers adding one in KPanel, writing the schedule and the command correctly for…
Une tâche cron exécute une commande selon un calendrier, en arrière-plan, que quelqu'un visite votre site ou non. Ce guide couvre l'ajout d'une tâche dans KPanel, la rédaction correcte du calendrier et de la commande pour cette plateforme, le remplacement du planificateur intégré peu fiable de WordPress, et la recherche de la sortie lorsqu'une tâche ne fonctionne pas comme prévu.
Où se trouve Cron dans KPanel
Cron appartient à un site, vous y accédez donc depuis le site plutôt que depuis le menu principal :
- Connectez-vous à KPanel et cliquez sur Websites dans la barre latérale gauche.
- Cliquez sur le site que vous souhaitez.
- Dans le menu propre du site, ouvrez Advanced, puis Cron.
L'adresse directe est /websites/<site-id>/cron. Vous verrez un tableau des tâches existantes, ou un état vide si le site n'en a aucune.

Ajouter une tâche
Cliquez sur Add Cron Job en haut à droite. Le formulaire comporte trois champs.
Schedule
Six boutons prédéfinis remplissent l'expression pour vous :
| Bouton | Expression |
|---|---|
| Every minute | * * * * * |
| Every 5 min | */5 * * * * |
| Every hour | 0 * * * * |
| Daily 2AM | 0 2 * * * |
| Weekly Sunday | 0 2 * * 0 |
| Monthly 1st | 0 2 1 * * |
Ou tapez la vôtre dans Cron expression. Les cinq champs, dans l'ordre, sont minute, heure, jour du mois, mois, jour de la semaine :
minute hour day-of-month month day-of-week
0 3 * * *s'exécute à 3h00 tous les jours.*/15 * * * *s'exécute toutes les quinze minutes.0 9 * * 1s'exécute à 9h00 tous les lundis.30 1 1 * *s'exécute à 1h30 le premier de chaque mois.0 */6 * * *s'exécute toutes les six heures, à l'heure juste.
Label
Un nom que vous reconnaîtrez plus tard, tel que WordPress cron ou Nightly stock sync. C'est ce que le tableau des tâches vous montre, donc rendez-le descriptif : job 3 n'aide personne à 2h du matin.
Command
La commande shell à exécuter. Cliquez sur Save pour créer la tâche.
Utilisez les chemins complets. Cron s'exécute avec un environnement minimal et aucun de votre profil shell, donc un php nu ou un répertoire relatif qui fonctionne quand vous êtes connecté via SSH échouera silencieusement ici. Écrivez le chemin complet, à chaque fois.
Rédiger la commande
Les tâches s'exécutent en tant qu'utilisateur système propre à votre site, donc votre répertoire personnel est le bon point d'ancrage et ~ se résout correctement. Les fichiers de votre site se trouvent à :
~/htdocs/yourdomain.co.nz
Vous pouvez confirmer le chemin exact sur l'onglet Files, puis SFTP du site, qui l'imprime sous Site files.
Commandes typiques :
cd ~/htdocs/yourdomain.co.nz && /usr/bin/wp cron event run --due-now
cd ~/htdocs/yourdomain.co.nz && /usr/bin/php bin/send-queued-emails.php
/usr/bin/curl -fsS https://yourdomain.co.nz/api/nightly-report
Testez la commande avant de la planifier. Collez-la dans la section WordPress, puis Console du site si c'est une commande wp, ou exécutez-la via SSH. Une tâche qui n'allait jamais fonctionner est beaucoup plus facile à détecter à l'invite que à 3h du matin dans un fichier journal.
Remplacer le planificateur intégré de WordPress
WordPress est livré avec son propre pseudo-planificateur, WP-Cron, qui ne s'active que lorsque quelqu'un charge une page. Sur un site peu fréquenté, les articles programmés sont publiés tardivement et les e-mails s'accumulent sans être envoyés. Sur un site très fréquenté, chaque visiteur paie le coût de la vérification du calendrier.
Une véritable tâche cron résout les deux problèmes. KPanel effectue tout l'échange pour vous :
- Ouvrez le site, puis l'onglet WordPress.
- Ouvrez la section WP-Cron.
- Cliquez sur Enable system cron.
Cela ajoute un calendrier qui exécute WP-Cron toutes les cinq minutes et définit DISABLE_WP_CRON de sorte que les chargements de page cessent de le déclencher également. Remove system cron sur le même écran annule les deux actions.
Si vous préférez le faire manuellement, c'est deux étapes :
Désactivez la version déclenchée par le visiteur. Ajoutez ceci à wp-config.php, au-dessus de la ligne /* That's all, stop editing! */, en utilisant Files, puis File Manager :
define( 'DISABLE_WP_CRON', true );
Ajoutez la vraie tâche. Dans Advanced, puis Cron :
- Schedule:
*/5 * * * * - Label:
WordPress cron - Command:
cd ~/htdocs/yourdomain.co.nz && /usr/bin/wp cron event run --due-now
Ne sautez pas la moitié DISABLE_WP_CRON. Avec les deux en cours d'exécution, chaque tâche programmée peut se déclencher deux fois : e-mails en doublon, traitement des commandes en doublon, frais en doublon sur un plugin d'abonnement. Utilisez l'action en un clic dans la section WP-Cron et cela ne peut pas vous arriver.
WooCommerce et files d'attente d'arrière-plan
WooCommerce utilise une file d'attente d'arrière-plan pour les changements d'état de commande, les renouvellements d'abonnement, les e-mails et les mises à jour de stock. Il repose sur WP-Cron, c'est donc exactement la charge de travail qui souffre sur un magasin peu fréquenté.
Une fois que le calendrier réel est en place, la file d'attente est traitée toutes les cinq minutes. Regardez-la dans WooCommerce, puis Status, puis Scheduled Actions dans wp-admin.
Un magasin à haut volume peut passer à */2 * * * *. Descendre en dessous de cela aide rarement : vous passez plus de temps à démarrer des processus qu'à faire du travail. Voir Setting Up WooCommerce.
Gestion des tâches existantes
Le tableau des tâches affiche Label, Schedule, Command, Last run et Status, avec deux actions sur chaque ligne :
- Disable met une tâche en pause sans la supprimer, et devient Enable pour la ramener. Utilisez ceci quand vous testez si une tâche cause un problème.
- Delete la supprime définitivement. Il vous est demandé de confirmer, et les exécutions programmées s'arrêtent immédiatement.
La suppression d'une tâche cron ne peut pas être annulée. Le calendrier est supprimé du serveur à ce moment-là. Si vous essayez simplement de l'arrêter temporairement, utilisez Disable.
Trouver la sortie
Chaque tâche que Kapsule crée a sa sortie capturée pour vous. La sortie standard et les erreurs sont ajoutées à un fichier journal dans un répertoire cron-logs du répertoire personnel de l'utilisateur de votre site, un fichier par tâche.
Ce journal est la réponse à presque chaque question « ma tâche a-t-elle s'exécutée ? », car il enregistre ce que la commande a imprimé et toute erreur qu'elle a levée.
Pour le lire, connectez-vous via SSH et regardez dans ~/cron-logs/. SSH utilise l'authentification par clé, ajoutez d'abord votre clé publique depuis l'onglet Files, puis SSH Keys du site : voir Adding SSH Keys.
Le File Manager et les comptes SFTP sont limités à votre répertoire de site, ~/htdocs/yourdomain.co.nz, et cron-logs se trouve un niveau au-dessus. C'est délibéré : cela empêche un entrepreneur ayant accès SFTP de faire autre chose que le site web. Utilisez SSH natif pour accéder aux journaux, ou redirigez la sortie dans votre répertoire de site comme indiqué ci-dessous.
Si vous préférez avoir la sortie quelque part que le File Manager peut ouvrir, redirigez-la vous-même :
cd ~/htdocs/yourdomain.co.nz && /usr/bin/wp cron event run --due-now >> ~/htdocs/yourdomain.co.nz/wp-content/cron.log 2>&1
2>&1 envoie les erreurs au même fichier que la sortie normale. Sans cela, les erreurs n'ont nulle part où aller.
Tout ce qui se trouve dans votre répertoire de site peut potentiellement être demandé sur le web. Placez un journal redirigé sous wp-content plutôt qu'à la racine du site, donnez-lui un nom que personne ne devinerait, et supprimez-le une fois que vous avez terminé le débogage.
Bonnes pratiques
- Échelonnez vos calendriers. Six tâches toutes configurées à
0 2 * * *commencent toutes à la fois. Échelonnez-les :0 2,10 2,20 2. - N'utilisez pas chaque minute à moins que vous n'en ayez vraiment besoin.
*/5suffit pour presque tout, y compris WordPress et WooCommerce. - Gardez les tâches courtes. Une tâche qui prend plus de temps que son intervalle se chevauchera avec la prochaine exécution.
- Redirigez la sortie pour tout ce qui est bruyant, afin qu'une tâche bavarde ne remplisse pas votre disque.
- Passez en revue la liste occasionnellement. Les tâches laissées derrière par un plugin que vous avez supprimé continuent de s'exécuter.
Dépannage
La tâche ne semble jamais s'exécuter. Vérifiez d'abord le chemin. Ouvrez le fichier journal. Confirmez ensuite que le statut est Active et non Disabled. Exécutez ensuite la même commande via SSH et voyez ce qu'elle dit.
« command not found » dans le journal. Un chemin complet manquant. Utilisez /usr/bin/php, /usr/bin/wp, /usr/bin/curl plutôt que le nom nu.
Permission refusée. La tâche s'exécute en tant qu'utilisateur système de votre site. Cet utilisateur doit être propriétaire, ou au moins pouvoir lire, tout ce que la commande touche. Vérifiez les permissions dans Using the File Manager.
Les tâches WordPress s'exécutent toujours tard. Confirmez que les deux moitiés de l'échange sont en place : le calendrier existe dans Advanced, puis Cron, et DISABLE_WP_CRON est défini. La section WP-Cron de l'onglet WordPress affiche l'état actuel des deux.
La tâche s'exécute mais le site est lent pendant ce temps. Déplacez-la à une heure plus calme, ou divisez le travail en lots plus petits. L'utilisation des ressources au niveau du site est visible sous Performance : voir Improving Website Speed.
Une tâche a cessé de fonctionner après une mise à jour de plugin. Le chemin de la commande peut avoir changé. Vérifiez le journal, puis mettez à jour la commande depuis le tableau des tâches en supprimant l'ancienne tâche et en en ajoutant une corrigée.