Utilisation de tâches cron

1

Nous considérons que ce message donné parfois par les scripts et applications pour la mise en place de tâches cron : 'contact your server administrator' ou 'contactez votre administateur serveur' est digne des années 80 :). En effet, que ce soit le panneau d'administration cPanel ou un autre, ce genre de fonction élementaire a été rendu accessible aux utilisateurs finaux : 'juste faites-le', il suffit de lire les indications de base de cPanel et cet article si besoin...

Depuis votre cPanel, section Avancé / Tâches Cron :

Gestion de Cron par cPanel


Attention :
L'éxecution de cron à intervalle trop rapproché sans besoin/justification conduit à des bugs, et dépassement de ressources conduisant au mauvais fonctionnement de votre site web

Selon vos besoins et recommandations de l'éditeur, voici les 2 formats A et B en exemples :
A. scripts PHP fonctionnant en php interne
/usr/bin/php -f /home/votreusercpanel/public_html/votredossier/votre-sous-dossier/votrefichier.php >/dev/null 2>&1
ou
php -f /home/votreusercpanel/public_html/votredossier/votre-sous-dossier/votrefichier.php >/dev/null 2>&1
(Le '-f' flag dit à PHP d'éxécuter tel fichier)
(Lire : http://php.net/manual/fr/features.commandline.options.php )

ou encore (si vous avez une erreur comme forbidden access :
/usr/local/bin/php -f /home/votreusercpanel/public_html/votredossier/votre-sous-dossier/votrefichier.php >/dev/null 2>&1


B. scripts PHP fonctionnant en externe :

wget -q -O /dev/null "http://www.votredomaine.fr/votredossier/votre-sous-dossier/votrefichier.php" >/dev/null 2>&1
ou
/usr/bin/wget -q -O /dev/null "http://www.votredomaine.fr/votredossier/votre-sous-dossier/votrefichier.php" >/dev/null 2>&1
ou

curl -s "http://www.votredomaine.fr/votredossier/votre-sous-dossier/votrefichier.php" >/dev/null 2>&1

NB : 
1. L'ajout de ceci permet de désencombrer le serveur pour qu'il n'exécute pas à la même seconde tous les cron (ssh doit être activé selon les cas) :
sleep $(expr $RANDOM \% 35);
Exemple d'intégration, c'est à mettre au début du cron :
sleep $(expr $RANDOM \% 35); /usr/bin/wget -q -O /dev/null "http://www.votredomaine.fr/votredossier/votre-sous-dossier/votrefichier.php" >/dev/null 2>&1
2. Evitez de mettre des crons avec les minutes à la valeur 0, et surtout diluez les minutes entre vos crons afin d'éviter un conflit applicatif local
3. Pour les crons wget, l'ajout de  -q -O /dev/null permet d'éviter d'écrire un fichier dans votre compte à chaque éxecution du cron
4. L'ajout de >/dev/null 2>&1 permet de stopper les mails envoyés à chaque éxecution


Scripts spécifiques et SHELL si les crons traditionnels ne fonctionnent pas

A. cron avec script sh
sh /home/votreusercpanel/public_html/votredossier/votre-sous-dossier/votrefichier.sh

B. Spécificité de certains scripts cron impliquant commandes shell et/ou shell_exec, nous sommes en environnement virtualisé avec isolation des comptes le système CageFS. Vous devez insérer ceci dans votre crontab par le shell :

MAILTO="user@votremail.com"
SHELL="/usr/local/cpanel/bin/jailshell"
PATH="/usr/local/bin/:/usr/bin:/bin"

Puis ajouter votre cron par cpanel simplement, exemple :
* * * * * php -f /home/votreusercpanel/votredomaine.com/cron.php >/dev/null 2>&1

NB : si besoin, vérifiez et adaptez bien les réglages php.ini par défaut dans votre cpanel, voir : disable_functions, lisez la doc de votre CMS/module ou contactez l'éditeur

Attention :
l'option -f peut ne pas convenir à certains scripts comme lorsqu'on optimise wordpress en désactivant wp-cron.php dans wordpress...

Désactiver wp-cron dans wordpress par ajout de ceci dans wp-config.php :
define('DISABLE_WP_CRON', true);

puis ajout du cron dans cpanel (exécution toutes les 10 minutes recommandée minimum, et remplacer par votre domaine) :
/usr/bin/wget -q -O /dev/null "https://www.votresiteweb.fr/wp-cron.php?doing_wp_cron"