Débogage crontab emplois
J'ai ajouté une entrée crontab sur un serveur Linux qui va exécuter un exécutable Java. Le code Java utilise sa propre classe pour la journalisation des erreurs et des messages dans un fichier journal.
Mais quand j'ai vérifié le fichier journal après l'heure prévue, pas de nouveaux messages ont été enregistrés. Il devrait y avoir au moins un message de journal disant que l'exécution a commencé.
Il y a donc deux causes possibles:
- Le code exécuté, mais n'a pas de journal;
- Ou, le code n'est pas exécuté du tout.
Le fichier journal spécifié a chmod 777
autorisations, donc je suppose que c'est la deuxième cause ici.
Pourquoi pas un crontab de l'emploi exécuter à l'heure prévue? Et comment corriger cela sans aucun type d'enregistrement qui se passe?
J'ai lu que si il y a une erreur cron envoie un e-mail à l'utilisateur. Comment puis-je trouver l'adresse de courriel associée à l'utilisateur?
Vous devez vous connecter pour publier un commentaire.
Vous pouvez activer la journalisation pour des tâches cron pour le suivi des problèmes. Vous devez modifier le
/etc/rsyslog.conf or /etc/rsyslog.d/50-default.conf
(sur Ubuntu) fichier et assurez-vous d'avoir la ligne suivante sans commentaire ou l'ajouter si elle est manquante:Puis redémarrez
rsyslog
etcron
:Des tâches Cron va se connecter à
/var/log/cron.log
.Ajouter 2>,&1 à la fin de votre commande Crontab. Cela permettra de rediriger la sortie stderr vers la sortie standard (stdout). Puis vous assurer que vous êtes à l'enregistrement de l'crontab Unix de commande.
Cela permettra de capturer quelque chose de la commande Unix.
Un couple de conseils supplémentaires (après avoir aidé un collègue l'autre jour ...). Écrire les variables d'environnement par l'émission de la commande set sans paramètres. Et obtenir le shell pour l'écho de chaque commande avec le set-x commande. En haut de votre script en question;
25 08 * * * /root/java/MyProject/sync.sh >> /root/java/Migration/sync.log 2>&1
. Si j'exécute le script shell cependant, le code s'exécute et la java enregistreur de classe écrit dans le fichier journalenv
commande dans le terminal et il ne marche pas afficher JAVA_HOME ou CLASSPATH. C'est le serveur où j'ai juste installé le JRE et non JDK. MerciEn supposant que l'exécution de la commande manuelle fonctionne, mais pas dans le Cron, il se peut que le chemin d'accès correct n'est pas exposé à la commande cron. Vous pouvez résoudre ce problème en exécutant la commande " crontab-e, puis en saisissant le chemin d'accès directement dans le cron tab:
# Export the path so that the scripts run correctly
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/opt/aws/bin:/root/bin
Une chose qui peut être la cause de votre problème, c'est que
cron
(au moins dans la distribution, je suis en utilisant, Amazon Linux OS) d'envisager de temps pour être en UTC, donc si vous êtes dans un autre fuseau horaire (par exemple -03:00) vous attend peut-être à courir 3 heures à l'avance qu'il va en fait et en fait, vous n'avez pas de problème.Vérifier si vous avez vraiment la mise en forme du moment où il a bien courir.
Par exemple, au lieu de
peut-être ceci:
et vous peut-être attend-il pour s'exécuter à chaque minute. Et aussi pas de journaux sont générés.