Je veux savoir comment je peux voir exactement ce que font les tâches cron à chaque exécution. Où se trouvent les fichiers journaux? Ou puis-je envoyer la sortie à mon e-mail? J'ai défini l'adresse e-mail pour envoyer le journal lorsque la tâche cron s'exécute, mais je n'ai encore rien reçu.
218
Réponses:
enregistrera toutes les sorties du travail cron dans /var/log/myjob.log
Vous pouvez utiliser
mail
pour envoyer des e-mails. La plupart des systèmes envoientcron
par courrier électronique la sortie du travail non gérée à l'utilisateur root ou à l'utilisateur correspondant.la source
2>&1
: stackoverflow.com/questions/818255/in-the-bash-shell-what-is-21stderr
etstdout
dans le journal, le2>&1
doit venir après l'indirection:myjob.sh >> /var/log/myjob.log 2>&1
YYYY-MM-DD_hh-mm-sec
dans le nom du fichier de sortie, afin que chaque nom de fichier soit différent et conservé sans réécriture?date +\%Y\%m\%d\%H\%M\%S
-cron.log 2> & 1Par défaut, cron se connecte à / var / log / syslog afin que vous puissiez voir les entrées liées à cron en utilisant:
/ubuntu/56683/where-is-the-cron-crontab-log
la source
journalctl | grep cron
sur les systèmes systemd/var/log/cron
sur AWS Linux AMI.sudo journalctl -u cron
cron
est enregistré est très dépendant du système. Il y a une réponse séparée avec des détails sur la façon dont les différentes destinations de journalisation sont configurées sur les systèmes Linux (ou plus correctement, les systèmes qui utilisentsyslog
). D'autres systèmes peuvent avoir une manière différente de configurer ces choses.Voici mon code:
la source
>>
ajoute et2>&1
dit d'envoyer l'erreur standard au même endroit que la sortie standard.Il existe au moins trois types différents de journalisation:
L'enregistrement AVANT l'exécution du programme, qui n'enregistre que SI le cronjob a ESSAYÉ d'exécuter la commande. Celui-ci se trouve dans / var / log / syslog, comme déjà mentionné par @Matthew Lock.
L'enregistrement des erreurs APRÈS que le programme a tenté de s'exécuter, qui peut être envoyé à un e-mail ou à un fichier, comme mentionné par @Spliffster. Je préfère me connecter à un fichier, car avec le courrier électronique, ALORS vous avez une NOUVELLE source de problèmes, et sa vérification si l'envoi et la réception du courrier électronique fonctionnent parfaitement. Parfois c'est le cas, parfois non. Par exemple, dans une simple machine de bureau commune dans laquelle vous n'êtes pas intéressé par la configuration d'un smtp, vous préférerez parfois vous connecter à un fichier:
Il existe quelques sources courantes de problèmes avec les tâches cron: * Le CHEMIN ABSOLU du binaire à exécuter. Lorsque vous l'exécutez à partir de votre shell, cela peut fonctionner, mais le processus cron semble utiliser un autre environnement, et donc il ne trouve pas toujours les binaires si vous n'utilisez pas le chemin absolu. * Les BIBLIOTHEQUES utilisées par un binaire. C'est plus ou moins le même point précédent, mais assurez-vous que, si vous mettez simplement le NOM de la commande, se réfère exactement au binaire qui utilise la même bibliothèque, ou mieux, vérifiez si le binaire auquel vous faites référence avec le chemin absolu est la même chose que vous faites référence lorsque vous utilisez directement la console. Les binaires peuvent être trouvés à l'aide de la commande Locate, par exemple:
Assurez-vous que le binaire que vous référerez est le même que le binaire que vous appelez dans votre shell, ou testez simplement à nouveau dans votre shell en utilisant le chemin absolu que vous prévoyez de mettre dans le cronjob.
la source
Sur Ubuntu, vous pouvez activer un
cron.log
fichier pour contenir uniquement les entrées CRON.Décommentez la ligne qui mentionne
cron
dans le/etc/rsyslog.d/50-default.conf
fichier:Enregistrez et fermez le fichier, puis redémarrez le
rsyslog
service:Vous pouvez maintenant voir les entrées du journal cron dans son propre fichier:
Exemples de sorties:
Cependant, vous ne verrez pas plus d'informations sur les scripts qui ont été réellement exécutés à l'intérieur
/etc/cron.daily
ou/etc/cron.hourly
, à moins que ces scripts ne dirigent la sortie vers cron.log (ou peut-être vers un autre fichier journal).Si vous souhaitez vérifier si une crontab est en cours d'exécution et ne pas avoir à la rechercher dans
cron.log
ousyslog
, créez une crontab qui redirige la sortie vers un fichier journal de votre choix - quelque chose comme:Étapes prises à partir de: https://www.cyberciti.biz/faq/howto-create-cron-log-file-to-log-crontab-logs-in-ubuntu-linux/
la source
cron
envoie déjà la sortie standard et l'erreur standard de chaque travail exécuté par courrier au propriétaire du travail cron.Vous pouvez utiliser
MAILTO=recipient
dans lecrontab
fichier pour envoyer les e-mails à un autre compte.Pour que cela fonctionne, vous devez avoir le courrier qui fonctionne correctement. La livraison à une boîte aux lettres locale n'est généralement pas un problème (en fait, les chances sont
ls -l "$MAIL"
que vous en ayez déjà reçu), mais pour le sortir de la boîte et le sortir sur Internet, il faut le MTA (Postfix, Sendmail, qu'avez-vous) pour être correctement configuré pour se connecter au monde.S'il n'y a pas de sortie, aucun e-mail ne sera généré.
Un arrangement courant consiste à rediriger la sortie vers un fichier, auquel cas, bien sûr, le démon cron ne verra le travail renvoyer aucune sortie. Une variante consiste à rediriger la sortie standard vers un fichier (ou à écrire le script pour qu'il n'imprime jamais rien - peut-être qu'il stocke les résultats dans une base de données à la place, ou effectue des tâches de maintenance qui ne produisent tout simplement rien?) Et ne reçoive un e-mail que s'il y a est un message d'erreur.
Pour rediriger les deux flux de sortie, la syntaxe est
Remarquez comment nous ajoutons (double
>>
) au lieu d'écraser, de sorte que la sortie d'un travail précédent ne soit pas remplacée par la suivante.Comme suggéré dans de nombreuses réponses ici, vous pouvez envoyer les deux flux de sortie vers un seul fichier; remplacer la deuxième redirection par
2>&1
pour dire "l'erreur standard doit aller partout où la sortie standard va". (Mais je n'approuve pas particulièrement cette pratique. Cela a surtout du sens si vous ne vous attendez vraiment à rien sur la sortie standard, mais que vous avez peut-être oublié quelque chose, provenant peut-être d'un outil externe appelé à partir de votre script.)cron
Les travaux s'exécutent dans votre répertoire personnel, donc tout nom de fichier relatif doit être relatif à celui-ci. Si vous souhaitez écrire en dehors de votre répertoire personnel, vous devez évidemment vous assurer séparément que vous avez accès en écriture à ce fichier de destination.Un contre-modèle courant consiste à tout rediriger vers
/dev/null
(puis à demander à Stack Overflow de vous aider à comprendre ce qui s'est mal passé lorsque quelque chose ne fonctionne pas; mais nous ne pouvons pas non plus voir la sortie perdue!)Dans votre script, assurez-vous de séparer la sortie régulière (résultats réels, idéalement sous forme lisible par machine) et les diagnostics (généralement formatés pour un lecteur humain). Dans un script shell,
Certaines plates-formes (et par exemple GNU Awk) vous permettent d'utiliser le nom de fichier
/dev/stderr
pour les messages d'erreur, mais ce n'est pas correctement portable; en Perl,warn
etdie
imprimer à l'erreur standard; en Python, écrivezsys.stderr
ou utilisezlogging
; à Ruby, essayez$stderr.puts
. Notez également comment les messages d'erreur doivent inclure le nom du script qui a généré le message de diagnostic.la source
Dans le cas où vous exécutez une commande avec sudo, cela ne le permettra pas. Sudo a besoin d'un tty.
la source
sudo
configuration. Les choses qui doivent s'exécuter sans moyen de fournir un mot de passe doivent être configurées avecNOPASSWD:
dans votresudoers
configuration.Lorsque vous spécifiez un e-mail valide, vous recevrez la sortie du travail cron qui est exécuté. Ainsi, vous pourrez le vérifier et vous assurer que tout a été correctement exécuté. Notez que vous ne recevrez pas d'e-mail s'il n'y a pas de sortie de la commande cron job.
N'oubliez pas que vous recevrez un e-mail pour chacune des tâches cron exécutées. Cela peut inonder votre boîte de réception au cas où vos crons fonctionneraient trop souvent
la source