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 redirige vers le périphérique nul, mais je ne suis pas sûr que la commande ci-dessus soit bonne.

*Edit 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
Solution

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

  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 oui, s'exécute-t-il aussi correctement comme ceci ?

     /bin/sh -c &quot ;(export PATH=/usr/bin:/bin ; /path_to_my_php_script/info.php &1)&quot ;

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

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 ajouter quelque chose comme ce qui suit au début de votre entrée crontab (vous devrez ajouter les répertoires dont votre script aura besoin) :

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

Notez également que cron utilisera par défaut /bin/sh, et non bash. 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 toutes les entrées de la crontab. Si vous voulez juste modifier ces valeurs pour votre programme info.php, vous pouvez faire quelque chose comme ceci :

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

Il est également utile de mentionner que sur un système configuré pour le "mail&quot ; (en d'autres termes un système qui a un MTA configuré [sendmail/postfix/etc]), toutes les sorties des programmes crontab vous sont envoyées par email automatiquement. Un système de bureau Ubuntu par défaut n&#8217aura pas de courrier local configuré, mais si vous travaillez sur un serveur, vous pouvez simplement taper "mail&quot ; dans un terminal pour voir tous ces courriers crontab. Ceci s'applique également à la commande "at&quot ;.

Commentaires (2)

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 lors de l'enregistrement d'un fichier après avoir modifié /etc/crontab ou les fichiers à l'intérieur de /etc/cron.d/ avec :

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

Si l'édition est correcte, vous ne verrez que la notice RELOAD, les erreurs se produiront comme suit

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

Vous pouvez voir votre cron actif avec la commande terminal :

crontab -l

Voici les paramètres dans l'ordre :

  1. min (0 - 59)

  2. heure (0 - 23)

  3. jour du mois (1 - 31)

  4. mois (1 - 12)

  5. Jour de la semaine (0 - 6) (Dimanche=0)

  6. commande

Ainsi, vous appelez votre script toutes les premières minutes de chaque heure. Vous devriez tester votre sortie à un intervalle plus fréquent à des fins de test :

* * * * *  #Runs every minute

Ceci l'appellera toutes les minutes !

Commentaires (1)