Vérifiez si crontab fonctionne

52

Je veux vérifier si un certain 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 null, mais je ne sais pas si la commande ci-dessus est 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
    
posée csgorankings.com 06.12.2011 - 10:58
la source

7 réponses

50

La syntaxe de l’entrée crontab est 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 de toute façon.

  1. Premièrement, /path_to_my_php_script/info.php s'exécute-t-il correctement à partir de la ligne de commande?

  2. Si oui, fonctionne-t-il aussi correctement?:

    /bin/sh -c "(export PATH=/usr/bin:/bin; /path_to_my_php_script/info.php </dev/null)"
    
  3. Si cela fonctionne, 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 manière dont cron exécutera votre programme (comme indiqué dans "man 5 cron".

Le problème le plus probable que vous rencontrez est que le cron PATH utilisé pour exécuter votre programme est trop restrictif. Par conséquent, vous souhaiterez peut-être ajouter ce qui suit en haut de votre entrée crontab (vous devrez ajouter les répertoires nécessaires à votre script):

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

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

SHELL=/bin/bash

Notez que ces deux modifications affecteront toutes les entrées de 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"

Cela vaut également la peine de mentionner que sur un système configuré pour "mail" (autrement dit un système qui a un MTA configuré [sendmail / postfix / etc]), toutes les sorties des programmes crontab vous sont envoyées automatiquement par email. 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 messages cron. Cela s'applique également à la commande " at ".

    
réponse donnée jamesodhunt 06.12.2011 - 15:15
la source
22

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

grep cron /var/log/syslog

Vous pouvez immédiatement afficher les erreurs lors de l’enregistrement d’un fichier après avoir édité /etc/crontab ou des fichiers dans /etc/cron.d/ avec:

tail -f /var/log/syslog | grep cron &

Si l’édition est correcte, vous ne verrez que la notice RELOAD , des erreurs se produiront comme

Jul 9 09:39:01 vm cron[1129]: Error: bad day-of-month; while reading /etc/cron.d/new 
    
réponse donnée rubiojr 06.12.2011 - 11:20
la source
16

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

Sous Linux:

service crond status
service crond stop
service crond start

Sur Ubuntu:

service cron status
service cron stop
service cron start
    
réponse donnée user53817 27.06.2016 - 22:21
la source
13

Vous pouvez voir votre cron actif avec la commande du 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

Donc, vous appelez votre script toutes les premières minutes de chaque heure. Vous devez tester votre sortie plus souvent à des fins de test:

* * * * * <command> #Runs every minute

Cela l'appellera toutes les minutes!

    
réponse donnée bioShark 06.12.2011 - 11:11
la source
6

Pour chaque partie de temps sur chaque ligne, vous pouvez utiliser ce testeur cron pour tester / vérifier votre définition de cron time.

    
réponse donnée Ashish Karpe 20.08.2016 - 18:21
la source
0

ah !!

J'ai eu la réponse moi-même, j'ai vérifié et je n'ai pas trouvé crond dans le répertoire d'installation par défaut, c'est-à-dire /etc/init.d/

va maintenant essayer de répondre.

note - j'ai vérifié le cron.allow , cron.deny aussi. Tout va bien jusqu'ici.

    
réponse donnée luckbychance 23.05.2014 - 15:25
la source
0

Je crois que vous pouvez également utiliser run-parts pour exécuter des tâches cron hors bande. C'est en fait ce que cron utilise lui-même pour exécuter les tâches périodiques cron. En fournissant les arguments appropriés, vous pouvez les exécuter à tout moment.

Si vous voulez simplement exécuter un seul fichier au lieu de tous les jobs cron définis dans, par exemple, /etc/cron.daily , vous devrez fournir l'argument regex avec une expression régulière valide. run-parts --list --regex '^p.*d$' /etc

Gardez à l'esprit que les tâches cron sont généralement nommées sans extension et marquées comme exécutables. Assurez-vous donc que vos scripts sont similaires, bien que l'utilisation d'une regex puisse vous permettre de déclencher un script avec une extension.

    
réponse donnée dragon788 17.10.2017 - 20:29
la source

Lire d'autres questions sur les étiquettes