web-dev-qa-db-fra.com

Comment puis-je savoir si mon travail cron horaire a été exécuté?

J'ai créé un fichier appelé ntpdate in /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 à ce dossier.

Cependant, je ne peux pas dire si le fichier a été exécuté ou non!

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

Si je lance manuellement cd / && run-parts --report /etc/cron.hourly, les fichiers sont créés et l’écho est généré.

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

25
wilhil

Un des principaux inconvénients de cron est que cron s'exécute dans un environnement Shell extrêmement limité. Par conséquent, de nombreuses variables ne sont pas exportées dans l'environnement, principalement $ PATH. Assurez-vous que vous utilisez tous les chemins absolus vers l'exécutable, y compris les fonctions courantes telles que echo, uptime, date, etc. doivent tous utiliser des chemins complets (/bin/echo, /bin/date, /usr/bin/uptime). Pour déterminer le chemin d'accès à un exécutable, vous pouvez utiliser la commande which comme ceci: which echo - cela vous montrera le chemin d'accès complet à cet outil.

25
Marco Ceppi

Vous devriez regarder dans votre fichier journal /var/log/syslog. Si un cron a fonctionné, 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 obtenir des conseils de dépannage, voir https://help.ubuntu.com/community/CronHowto#Troubleshooting_and_Common_Problems

36
Lekensteyn

Essayez de changer la première ligne de votre script (l'interprète) pour:

#!/bin/bash

J'ai également eu des problèmes dans le passé, avec des variables d'environnement et des problèmes avec PATH. Après avoir remplacé l’interprète par bash, mes problèmes ont disparu.

2
Awi

Etant donné que j'ai ajouté le script clearme.sh à /etc/cron.hourly/

Il suffit de filtrer les tâches CRON dans terminal avec le puissant 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 pas à pas:

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

La 4ème étape est optionnelle. Il imprimera simplement les résultats dans le terminal au lieu du fichier.

1