Exécuter un script PHP en tâche cron Imprimer

  • cron, tâche, task, script php
  • 6

Il est souvent nécessaire de devoir exécuter un script PHP à intervalles réguliers et de manière automatisée. Pour cela, rien de tel que les tâches cron.

Il est tout à fait possible d'administrer les tâches cron de votre serveur/VPS via Webmin : https://ns1234.ovh.net:10000 > Webmin > System > Scheduled Cron Jobs puis cliquer sur une des tâches pour l'éditer ou bien cliquer sur Create a new scheduled cron job pour en créer une. Attention, il est normal de voir s'afficher un certain nombre de tâches cron que vous n'avez pas vous-même créées. Merci de ne pas les modifier/supprimer : elles ont été mises en place à l'installation du serveur/VPS et sont nécessaires à son bon fonctionnement. Merci donc de ne modifier que les tâches que vous auriez vous-même créées.

Ceci étant posé, voici ce qu'il vous faut remplir comme champs dans le formulaire une fois que vous aurez cliqué sur Create a new scheduled cron job :

1) Execute cron job as

Il est très important de faire exécuter les tâches cron de chaque site avec l'utilisateur système du site en question. Sauf cas exceptionnel, le nom de l'utilisateur est identique au nom de domaine du site sans son extension. Ainsi, si votre serveur/VPS héberge le site monsite.com, il y a de fortes chances pour que l'utilisateur de ce site soit monsite. Si vous avez un doute à ce sujet, Webmin vous propose en un petit bouton à droite du champ Execute cron job as vous permettant de visualiser tous les utilisateurs du système. Il vous reste alors à sélectionner le bon.

2) Command

Il s'agit là de la commande à passer, le coeur de votre tâche cron. Voici ce à quoi elle doit ressembler si vous souhaitez exécuter le script monscript.php se trouvant sur monsite.com :

/usr/bin/php -q /home/monsite/public_html/monscript.php >/dev/null 2>&1

Il vous faut bien sûr adapter la partie /home/monsite/public_html/monscript.php mais attention : il est important de ne rien omettre du reste, faute de quoi la tâche cron générera inévitablement beaucoup de mails qui risquent à terme de saturer le serveur.

Attention également à indiquer le chemin complet de l'emplacement du script depuis la racine du serveur/VPS. Il est donc essentiel que ce chemin commence par /home/monsite/public_html/

L'exemple ci-dessus lancera votre script comme si vous l'exécuteriez en ligne de commande. C'est la manière classique de procéder mais, dans certains cas, il est préférable de faire exécuter PHP au travers du serveur Apache. Auquel cas, il est préférable d'appeler votre script comme une page web et il vous faudra alors utiliser la commande wget. Votre commande devra alors ressembler à ceci :

wget -q -O - https://www.monsite.com/monscript.php >/dev/null 2>&1

Ici encore, il vous faut adapter la partie https://www.monsite.com/monscript.php et attention ici aussi à ne rien omettre du reste. Il est en effet important de rendre la tâche muette, sans quoi elle générera très probablement de nombreux fichiers indésirables.

3) When to execute

Il vous reste à présent à déterminer à quelle fréquence la tâche doit être exécutée. Je n'insiste pas plus, cette partie est en principe assez simple à comprendre. Attention toutefois à ne pas exécuter trop fréquemment des scripts qui pourraient mettre beaucoup de temps à s'exécuter. Comme vous pouvez le voir, vous avez la possibilité de lancer une tâche cron aussi souvent que toutes les minutes si tel est votre souhait. Pour autant, vous comprendrez certainement qu'il peut être très problématique d'exécuter toutes les minutes une tâche qui mettrait plusieurs minutes à s'exécuter...

Vous pouvez ensuite vous attarder sur la partie Date range to execute si vous souhaitez que votre script ne soit exécuté qu'à certaines dates, mais cette partie est optionnelle et force est de constater qu'elle est rarement utilisée.

Un petit exemple pour terminer

Ci-dessous une petite capture d'écran d'un script monscript.php se trouvant sur monsite.com et devant être exécuté (en ligne de commande) toutes les 5 minutes :


Cette réponse était-elle pertinente?

« Retour