# Configurer et gérer les tâches cron

Source: https://support.kapsulehost.com/fr-fr/cron-jobs

Une tâche cron exécute une commande selon un horaire, en arrière-plan, que quelqu'un visite votre site ou non. Ce guide explique comment en ajouter une dans KPanel, comment rédiger correctement l'horaire et la commande pour cette plateforme, comment remplacer le planificateur intégré peu fiable de WordPress, et comment retrouver la sortie lorsqu'une tâche ne fait pas ce que vous attendiez.

## Où se trouve le cron dans KPanel

Le cron appartient à un site, vous y accédez donc depuis le site plutôt que depuis le menu principal :

1. Connectez-vous à [KPanel](https://kpanel.kapsulehost.com) et cliquez sur **Sites web** dans la barre latérale gauche.
2. Cliquez sur le site souhaité.
3. Dans le menu propre au site, ouvrez **Paramètres**, 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.

![La page Cron d'un site dans KPanel, répertoriant les tâches planifiées sur ce site](https://support.kapsulehost.com/help/screenshots/cron-jobs.13aef775.webp)

## Ajouter une tâche

Cliquez sur **Ajouter une tâche cron** en haut à droite. Le formulaire comporte trois champs.

### Horaire

Six boutons prédéfinis remplissent l'expression pour vous :

| Bouton | Expression |
|---|---|
| Chaque minute | `* * * * *` |
| Toutes les 5 min | `*/5 * * * *` |
| Chaque heure | `0 * * * *` |
| Quotidien 2h | `0 2 * * *` |
| Hebdomadaire dimanche | `0 2 * * 0` |
| Mensuel 1er | `0 2 1 * *` |

Ou saisissez la vôtre dans **Expression cron**. 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 chaque jour.
- `*/15 * * * *` s'exécute toutes les quinze minutes.
- `0 9 * * 1` s'exécute à 9h00 chaque lundi.
- `30 1 1 * *` s'exécute à 1h30 le premier de chaque mois.
- `0 */6 * * *` s'exécute toutes les six heures, à l'heure pile.

### Étiquette

Un nom que vous reconnaîtrez plus tard, comme `WordPress cron` ou `Nightly stock sync`. C'est ce que le tableau des tâches vous affiche, rendez-le donc descriptif : `job 3` n'aide personne à 2h du matin.

### Commande

La commande shell à exécuter. Cliquez sur **Save** pour créer la tâche.

> **Warning:** Utilisez des chemins complets. Le cron s'exécute avec un environnement minimal et sans aucun de vos profils shell, donc une simple `php` ou un répertoire relatif qui fonctionne lorsque vous êtes connecté via SSH échouera ici silencieusement. É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, votre répertoire personnel est donc 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 dans l'onglet **Paramètres**, puis **SFTP** du site, qui l'affiche sous **Fichiers du site**.

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
```

> **Tip:** Testez la commande avant de la planifier. Collez-la dans la section **WordPress**, puis **Console** du site s'il s'agit d'une commande `wp`, ou exécutez-la via SSH. Une tâche qui n'allait jamais fonctionner est bien plus facile à repérer à l'invite de commande qu'à 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 se déclenche que lorsque quelqu'un charge une page. Sur un site peu fréquenté, les articles planifiés sont publiés en retard 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 de l'horaire.

Une véritable tâche cron corrige les deux problèmes. KPanel effectue tout le basculement pour vous :

1. Ouvrez le site, puis l'onglet **WordPress**.
2. Ouvrez la section **WP-Cron**.
3. Cliquez sur **Activer le cron système**.

Cela ajoute un horaire qui exécute WP-Cron toutes les cinq minutes et définit `DISABLE_WP_CRON` afin que les chargements de page cessent également de le déclencher. **Supprimer cron système** sur le même écran annule les deux moitiés.

Si vous préférez le faire manuellement, cela se fait en deux étapes :

**Désactiver la version déclenchée par les visiteurs.** Ajoutez ceci à `wp-config.php`, au-dessus de la ligne `/* That's all, stop editing! */`, en utilisant **Paramètres**, puis **Gestionnaire de fichiers** :

```php
define( 'DISABLE_WP_CRON', true );
```

**Ajouter la véritable tâche.** Dans **Paramètres**, puis **Cron** :

- Horaire : `*/5 * * * *`
- Étiquette : `WordPress cron`
- Commande : `cd ~/htdocs/yourdomain.co.nz && /usr/bin/wp cron event run --due-now`

> **Warning:** Ne sautez pas la moitié `DISABLE_WP_CRON`. Avec les deux en cours d'exécution, chaque tâche planifiée peut se déclencher deux fois : e-mails en double, traitement des commandes en double, débits en double sur un plugin d'abonnement. Utilisez l'action en un clic de la section WP-Cron et cela ne pourra pas vous arriver.

## WooCommerce et files d'attente en arrière-plan

WooCommerce utilise une file d'attente en arrière-plan pour les changements de statut de commande, les renouvellements d'abonnement, les e-mails et les mises à jour de stock. Il s'appuie sur WP-Cron, c'est donc exactement le type de charge de travail qui souffre sur une boutique peu fréquentée.

Une fois le véritable horaire en place, la file d'attente est traitée toutes les cinq minutes. Surveillez-la dans **WooCommerce**, puis **Status**, puis **Scheduled Actions** dans wp-admin.

Une boutique à fort volume peut passer à `*/2 * * * *`. Descendre en dessous de ce seuil aide rarement : vous passez plus de temps à démarrer des processus qu'à effectuer le travail. Voir [Configurer WooCommerce](https://support.kapsulehost.com/fr-fr/wordpress-woocommerce).

## Gérer les tâches existantes

Le tableau des tâches affiche **Label**, **Schedule**, **Command**, **Dernière exécution** et **Status**, avec deux actions sur chaque ligne :

- **Disable** met une tâche en pause sans la supprimer, et devient **Enable** pour la réactiver. Utilisez ceci lorsque vous testez si une tâche cause un problème.
- **Delete** la supprime définitivement. On vous demande de confirmer, et les exécutions planifiées s'arrêtent immédiatement.

> **Important:** La suppression d'une tâche cron est irréversible. L'horaire est retiré du serveur sur le champ. Si vous essayez seulement de l'arrêter temporairement, utilisez **Disable**.

## Trouver la sortie

Chaque tâche créée par KapsuleHost voit sa sortie capturée pour vous. La sortie standard et les erreurs sont ajoutées à un fichier journal dans un répertoire `cron-logs` situé dans le répertoire personnel de l'utilisateur de votre site, un fichier par tâche.

Ce journal répond à presque toutes les questions du type « ma tâche s'est-elle exécutée ? », car il enregistre ce que la commande a affiché et toute erreur qu'elle a soulevée.

Pour le lire, connectez-vous via SSH et regardez dans `~/cron-logs/`. SSH utilise l'authentification par clé, ajoutez donc d'abord votre clé publique depuis l'onglet **Paramètres**, puis **Clés SSH** du site : voir [Ajouter des clés SSH](https://support.kapsulehost.com/fr-fr/adding-ssh-keys).

> **Note:** Le Gestionnaire de fichiers et les comptes SFTP sont confiné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 prestataire disposant d'un accès SFTP d'accéder à autre chose que le site web. Utilisez SSH natif pour atteindre les journaux, ou redirigez la sortie vers votre répertoire de site comme indiqué ci-dessous.

Si vous préférez avoir la sortie quelque part où le Gestionnaire de fichiers peut l'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 vers le même fichier que la sortie normale. Sans cela, les erreurs ne vont nulle part.

> **Warning:** Tout ce qui se trouve dans votre répertoire de site peut potentiellement être demandé via 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 votre débogage terminé.

## Bonnes pratiques

- **Échelonnez vos horaires.** Six tâches réglées sur `0 2 * * *` démarrent toutes en même temps. Répartissez-les : `0 2`, `10 2`, `20 2`.
- **N'utilisez pas « chaque minute » sauf si c'est vraiment nécessaire.** `*/5` suffit pour presque tout, y compris WordPress et WooCommerce.
- **Gardez les tâches courtes.** Une tâche qui prend plus de temps que son intervalle chevauchera l'exécution suivante.
- **Redirigez la sortie pour tout ce qui est verbeux**, afin qu'une tâche bavarde ne remplisse pas votre disque.
- **Vérifiez la liste de temps en temps.** Les tâches laissées 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. Puis confirmez que le statut est **Active** et non **Disabled**. Ensuite, exécutez la même commande via SSH et voyez ce qu'elle indique.

**« 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 seul.

**Permission refusée.** La tâche s'exécute en tant qu'utilisateur système de votre site. Cet utilisateur doit posséder, ou au moins pouvoir lire, tout ce que la commande touche. Vérifiez les permissions dans [Utiliser le Gestionnaire de fichiers](https://support.kapsulehost.com/fr-fr/file-manager).

**Les tâches WordPress s'exécutent toujours en retard.** Confirmez que les deux moitiés du basculement sont en place : l'horaire existe dans **Paramètres**, 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 vers une heure plus calme, ou divisez le travail en lots plus petits. L'utilisation des ressources au niveau du site est visible sous **Performances** : voir [Améliorer la vitesse du site web](https://support.kapsulehost.com/fr-fr/website-speed).

**Une tâche a cessé de fonctionner après une mise à jour de plugin.** Le chemin de la commande a peut-être 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.
