115 votes

Vérifier si la crontab fonctionne

Je veux vérifier si une certaine crontab fonctionne correctement. J'ai ajouté un travail comme celui-ci :

  */2 * * * * /path_to_my_php_script/info.php >/dev/null 2>&1

Je sais que je dois rediriger vers le périphérique nul, mais je ne suis pas sûr que la commande ci-dessus soit bonne.

*Modification 1 : Dans mon /var/log/syslog, toutes les deux minutes, j'ai l'erreur suivante :

 (CRON) error (grandchild #2788 failed with exit status 2)

*Edit 2 : Aucune erreur dans les journaux avec ce nouveau travail :

 */2 * * * * /usr/bin/php /path_to_my_php_script/info.php >/dev/null 2>&1

92voto

jhamu Points 1435

Bien que cela soit très rare, il arrive que cron cesse de fonctionner correctement, même si le service est en cours d'exécution. Voici comment vérifier que cron est en cours d'exécution et arrêter/démarrer le service.

Utilisation de systemctl :

systemctl status cron
systemctl restart cron

Méthodes plus anciennes :
Sur CentOS et d'autres systèmes basés sur Red Hat :

service crond status
service crond stop
service crond start

Sur Ubuntu et les autres systèmes basés sur Debian :

service cron status
service cron stop
service cron start

83voto

EC182 Points 194

La syntaxe de l'entrée crontab semble correcte. En effet, si vous éditez votre crontab en utilisant " crontab -e "(comme vous le devriez), vous obtiendrez une erreur si vous spécifiez une entrée crontab syntaxiquement invalide.

  1. Tout d'abord, est-ce que /path_to_my_php_script/info.php s'exécute correctement depuis la ligne de commande ?

  2. Si c'est le cas, est-ce qu'il fonctionne aussi correctement comme ça ?

    /bin/sh -c "(export PATH=/usr/bin:/bin; /path_to_my_php_script/info.php </dev/null)"
  3. Si ça marche, est-ce que ça marche comme ça ?

    /bin/sh -c "(export PATH=/usr/bin:/bin; /path_to_my_php_script/info.php </dev/null >/dev/null 2>&1)"

L'étape (3) est similaire à la façon dont cron va exécuter votre programme (comme documenté dans "man 5 cron".

Le problème le plus probable que vous rencontrez est que le PATH que cron utilise pour exécuter votre programme est trop restrictif. Par conséquent, vous pouvez souhaiter ajouter quelque chose comme ce qui suit en haut de votre entrée crontab (vous devrez ajouter dans tous les répertoires dont votre script aura besoin) :

PATH=~/bin:/usr/bin/:/bin

Notez également que cron utilisera par défaut /bin/sh pas du tout. Si vous avez besoin de bash, ajoutez également ceci au début de votre fichier crontab :

SHELL=/bin/bash

Notez que ces deux changements affecteront todo les entrées de la crontab. Si vous souhaitez simplement modifier ces valeurs pour votre info.php vous pourriez faire quelque chose comme ceci :

*/2 * * * * /bin/bash -c ". ~/.bashrc; /path_to_my_php_script/info.php"

Il convient également de mentionner que sur un système configuré pour le "courrier" (en d'autres termes, un système qui a un MTA configuré [sendmail/postfix/etc]), tous les résultats des programmes crontab vous sont envoyés automatiquement par courrier électronique. Un système de bureau Ubuntu par défaut n'aura pas de courrier local configuré, mais si vous travaillez sur un serveur, vous pouvez simplement taper "mail" dans un terminal pour voir tous ces courriers cron. Ceci s'applique également à la fonction " at Commande ".

36voto

OLV Points 494

Ne pas rediriger la sortie d'erreur vers /dev/null et grep /var/log/syslog pour la sortie cron.

grep cron /var/log/syslog

Vous pouvez afficher immédiatement les erreurs lorsque vous enregistrez un fichier après l'avoir modifié. /etc/crontab ou des fichiers dans /etc/cron.d/ avec :

tail -f /var/log/syslog | grep --line-buffered cron

Si la modification est acceptée, vous ne verrez que l'élément suivant RELOAD avis, des erreurs se produiront comme

Jul 9 09:39:01 vm cron[1129]: Error: bad day-of-month; while reading /etc/cron.d/new

14voto

Vieille question et nombreuses réponses compliquées. Le moyen le plus simple est d'ajouter cette ligne à votre crontab

* * * * * /bin/bash -l -c 'date > ~/cron-test.txt'

Il écrira simplement chaque minute la date actuelle dans le fichier ~/cron-test.txt

Ensuite, il suffit de lancer cat ~/cron-test.txt et vérifier si la date affichée est la date actuelle. Si c'est le cas, la crontab fonctionne correctement.

11voto

Ashish Karpe Points 2099

Pour la partie temps sur chaque ligne, vous pouvez utiliser ceci testeur de cron pour tester/vérifier votre définition de l'heure cron.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X