Vérifier si la crontab fonctionne


82

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

malheureusement tout a été essayé mais ne fonctionne pas pour moi. comme vous dites le procès / bin / sh -c "(export PATH = / bin; /tmp/trial.sh </ dev / null)" affiche le message ci-dessous, ne sachant pas ce que c'est / bin / sh: PATH = / bin : n'est pas un identifiant

Réponses:


73

La syntaxe de l'entrée crontab semble correcte. En effet, si vous modifiez votre crontab en utilisant " crontab -e" (comme vous le devriez), 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.phps’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 cela fonctionne, ç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 toutes les entrées de la crontab. Si vous voulez simplement modifier ces valeurs pour votre info.phpprogramme, vous pouvez faire quelque chose comme ceci:

*/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 atcommande " ".


2
Je reçois l'autorisation refusée pour la 2e étape. Que devrais-je faire?
Akikara

@akikara chmod + x ./cron.sh - remplacez évidemment ./cron.sh par l'emplacement de votre fichier, quel que soit l'endroit où vous essayez de l'exécuter
Jeudi

46

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 et d’autres systèmes basés sur Debian:

service cron status
service cron stop
service cron start

13
Juste une note ... pour Ubuntu, ce n'est cronpas çacrond
Amit Kohli

32

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 lorsque vous enregistrez un fichier après une édition /etc/crontabou des fichiers /etc/cron.d/avec:

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

Si l'édition est ok, vous ne verrez que la RELOADnotification, des erreurs se produiront comme

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

19

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!


* / 2 * * * * J'ai changé à toutes les deux minutes maintenant
croppio.com


2

Je pense que vous pouvez également utiliser run-partsdes 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.dailyvous 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

ah !!

J'ai moi-même eu la réponse, j'ai vérifié et je n'ai pas trouvé crondle 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.denyaussi. Tout va bien jusqu'à présent.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.