Comment savoir si mon travail cron horaire s'est exécuté?

26

J'ai créé un fichier appelé ntpdatedans/etc/cron.hourly

#!/bin/sh
/usr/sbin/ntpdate-debian
date > /tmp/william_tmp
date > /william_tmp
date > ~/william_tmp
echo test

J'ai également fait Chmod 755 dans ce fichier.

Cependant, je ne peux pas dire si le fichier a fonctionné ou non!

Le fichier n'est créé dans aucun des 3 répertoires.

Si je lance manuellement, cd / && run-parts --report /etc/cron.hourlyles fichiers sont créés et j'obtiens l'écho.

Quelqu'un peut-il recommander (idéalement étape par étape!) Des instructions pour vérifier que cela fonctionne?

Wilhil
la source

Réponses:

25

Un écueil majeur de cron est que les exécutions de cron dans un environnement shell extrêmement limité, par conséquent beaucoup de variables ne sont pas exportées dans l'environnement, principalement $ PATH. Assurez-vous d' utiliser tous les chemins absolus à exécutable, y compris les fonctions communes comme echo, uptime, date, etc ont tous besoin d'utiliser les chemins complets ( /bin/echo, /bin/date, /usr/bin/uptime). Pour déterminer le chemin vers un exécutable, vous pouvez utiliser la whichcommande comme ceci: which echo- cela vous montrera le chemin complet vers cet outil.

Marco Ceppi
la source
Comme discuté dans le chat, merci pour cela et j'espère vraiment que cela aidera quelqu'un d'autre ... Alors que j'ai fait le chemin de l'automne vers ntpdate, je suis tellement habitué à Windows et à l'écho / la date étant juste "intégré", je ne l'ai juste pas fait " Je pense que j'aurais besoin d'un chemin complet ... en apprendre beaucoup plus sur Linux et c'est parfaitement logique!
wilhil
36

Vous devriez regarder dans votre /var/log/syslogfichier journal. Si un cron s'est exécuté, il aurait une ligne comme:

Jun 11 19:09:01 penguin CRON[17376]: (root) CMD (  [ -x /usr/lib/php5/maxlifetime ] && [ -d /var/lib/php5 ] && find /var/lib/php5/ -depth -mindepth 1 -maxdepth 1 -type f -cmin +$(/usr/lib/php5/maxlifetime) ! -execdir fuser -s {} 2>/dev/null \; -delete)
Jun 11 19:17:01 penguin CRON[17799]: (root) CMD (   cd / && run-parts --report /etc/cron.hourly)

Pour des conseils de dépannage, voir https://help.ubuntu.com/community/CronHowto#Troubleshooting_and_Common_Problems

Lekensteyn
la source
Il n'y a rien dans Syslog et je ne vois aucune raison pour laquelle cela échouerait à partir de ce lien :(
wilhil
1
S'il n'y a aucune entrée dans syslog ( grep -i cron /var/log/syslog /var/log/syslog.1), commencez à vérifier si le démon cron est en cours d'exécution: ps uww -C crondoit contenir une ligne avec un processus.
Lekensteyn
Désolé d'être trompeur, il y a des ententes pour Cron dans le syslog, juste rien concernant cette commande ... Je sais que certains travaux sont exécutés comme toutes les heures, je reçois une nouvelle alerte mail ... AFAIK, ceux qui fonctionnent sont de crontab, il n'y a rien dans cron.hourly qui est ce que j'essaye de faire travailler
wilhil
2

Essayez de changer la première ligne de votre script (l'interpréteur) en:

#!/bin/bash

J'ai également eu des problèmes dans le passé, avec des variables d'environnement et des problèmes de PATH. Après avoir changé l'interprète pour bashmes problèmes ont disparu.

Awi
la source
1

Étant donné que j'ai ajouté le clearme.shscript dans/etc/cron.hourly/

Il suffit de filtrer les tâches CRON dans le terminal avec les puissants egrep et awk :

$ cat /var/log/syslog | egrep clearme | awk "{ print $1 }" > ~/Desktop/cronlog.txt

La sortie ressemblera à:

Jan 14 15:20:01 markets-dev CRON[10089]: (dminca) CMD (root /etc/cron.hourly/clearme.sh)
Jan 14 15:40:01 markets-dev CRON[18042]: (dminca) CMD (root /etc/cron.hourly/clearme.sh)
Jan 14 16:00:01 markets-dev CRON[22817]: (dminca) CMD (root /etc/cron.hourly/clearme.sh)
Jan 14 16:20:01 markets-dev CRON[28183]: (dminca) CMD (root /etc/cron.hourly/clearme.sh)
Jan 14 16:40:01 markets-dev CRON[411]: (dminca) CMD (root /etc/cron.hourly/clearme.sh)
Jan 14 17:00:01 markets-dev CRON[5442]: (dminca) CMD (root /etc/cron.hourly/clearme.sh)
Jan 14 17:20:01 markets-dev CRON[11935]: (dminca) CMD (root /etc/cron.hourly/clearme.sh)

Pour tout expliquer étape par étape:

  1. cat / var / log / syslog - imprimez-moi le journal système
  2. egrep clearme - mais sélectionnez uniquement les lignes qui contiennent le texte clearme
  3. awk "{print $ 1}" - imprime-moi cette ligne qui contient le texte clearme
  4. > ~ / Desktop / cronlog.txt - affiche les résultats dans le fichier cronlog.txt situé dans le répertoire Desktop .

La 4e étape est facultative. Il affichera simplement les résultats dans le terminal au lieu du fichier.

Daniel Andrei Mincă
la source