30 votes

Comment puis-je savoir si ma tâche cron horaire a été exécutée ?

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

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

J'ai également attribué le Chmod 755 à ce fichier.

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

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

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

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

43voto

Lekensteyn Points 162346

Vous devriez regarder dans votre /var/log/syslog fichier journal. Si un cron a été exécuté, il contiendra 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

26voto

Redbaron Points 523

L'un des principaux écueils de cron est qu'il fonctionne dans un environnement Shell extrêmement limité, ce qui fait que de nombreuses variables ne sont pas exportées dans l'environnement, notamment $PATH. Assurez-vous d'utiliser tous les chemins absolus vers les exécutables, y compris les fonctions communes comme echo , uptime , date etc. doivent tous utiliser des chemins d'accès 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 suit : which echo - cela vous indiquera le chemin d'accès complet à cet outil.

2voto

Ravindra Sahay Points 1

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éteur en bash mes problèmes ont disparu.

2voto

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

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

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

Le résultat sera le suivant :

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)

Expliquer tout, étape par étape :

  1. cat /var/log/syslog - imprimez-moi le journal du système
  2. egrep clearme - mais ne sélectionner que les lignes qui contiennent le texte clearme
  3. awk "{ print $1 }" - m'imprimer la ligne qui contient le texte clearme
  4. > ~/Desktop/cronlog.txt - produire les résultats dans le fichier cronlog.txt situé sur le site de la Bureau répertoire.

La quatrième étape est facultative. Elle permet d'imprimer les résultats dans le terminal au lieu du fichier.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X