web-dev-qa-db-fra.com

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 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
71
resizemyimg.com

La syntaxe de l'entrée crontab semble correcte. En effet, si vous modifiez votre crontab à l'aide de "crontab -e" (comme il se doit), vous obtiendrez une erreur si vous spécifiez quand même une entrée de crontab syntaxiquement invalide.

  1. Tout d'abord, /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 correctement comme ceci ?:

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

Le problème le plus probable que vous rencontrez est que le PATH utilisé par cron pour exécuter votre programme est trop restrictif. Par conséquent, vous souhaiterez peut-être ajouter quelque chose comme ceci en haut de votre entrée dans la 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, pas bash. Si vous avez besoin de bash, ajoutez également ceci au début de votre fichier crontab:

Shell=/bin/bash

Notez que ces deux modifications affecteront tous les entrées de la crontab. Si vous souhaitez simplement modifier ces valeurs pour votre programme info.php, vous pouvez procéder de la manière suivante:

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

Il est également intéressant de noter que sur un système configuré pour "mail" (en d'autres termes, un système sur lequel un MTA est configuré [sendmail/postfix/etc]), toutes les sorties des programmes crontab vous sont envoyées automatiquement par courrier électronique. La messagerie locale ne sera pas configurée sur un système de bureau Ubuntu par défaut, 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 commande "at".

63
jamesodhunt

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 est en cours d'exécution 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
37
user53817

Ne redirigez 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 l'édition de /etc/crontab ou de fichiers à l'intérieur de /etc/cron.d/ avec:

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

Si l'édition est correcte, vous ne verrez que l'avis 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 
27
rubiojr

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. commander

Donc, vous appelez votre script à la première minute de chaque heure. Vous devez tester votre sortie à des intervalles plus fréquents à des fins de test:

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

Cela va l'appeler chaque minute!

16
bioShark

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

8
Ashish Karpe

Je pense que vous pouvez également utiliser run-parts pour exécuter des tâches cron en dehors du groupe. C’est en fait ce que cron utilise pour exécuter les tâches périodiques, donc en fournissant les arguments appropriés, vous pouvez les exécuter à tout moment.

Si vous souhaitez uniquement exécuter un fichier à la place de tous les travaux cron définis dans, par exemple, /etc/cron.daily, vous devrez fournir l'argument regex avec une expression rationnelle valide. run-parts --list --regex '^p.*d$' /etc

N'oubliez pas 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 expression régulière puisse vous permettre de déclencher un script avec une extension.

1
dragon788

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 i.e /etc/init.d/

va maintenant essayer de répondre.

note - J'ai aussi vérifié le cron.allow, cron.deny. Tout va bien jusqu'à présent.

0
luckbychance