89 votes

Comment puis-je visualiser les résultats de mes tâches cron ?

Je vois tellement de guides sur la façon d'exécuter crontab, mais ce dont j'ai besoin en ce moment est d'apprendre comment

  1. Trouver les fichiers journaux des tâches cron
  2. Configurer ce qui est enregistré

85voto

Michael Medin Points 605

Vérifiez si les programmes que vous exécutez avec cron ont leurs propres fichiers journaux. S'ils n'en ont pas mais écrivent leurs sorties dans les sorties standard, vous pouvez les rediriger vers des fichiers ou vous les envoyer par courrier. Dans les crontabs redirection standard de Shell. travaux.

Par exemple, pour rediriger la sortie d'erreur de some_job.sh à some_job.err et rejeter la sortie standard (c'est-à-dire l'envoyer à /dev/null ) ajoutez la redirection suivante à votre crontab

 33 3 * * * /path/to/some_job.sh 1> /dev/null 2> /other/path/to/some_job.err

ou de vous l'envoyer par courrier (si mail est disponible)

 33 3 * * * /path/to/some_job.sh 1> /dev/null 2>&1 | mail -s "cron output" you@example.org

10voto

Spiff Points 95683

La plupart des démons cron sur les plates-formes avec lesquelles j'ai travaillé envoient automatiquement par courriel le stdout/stderr des tâches cron de l'utilisateur à l'utilisateur dont la crontab provient de la tâche. J'ai oublié ce qui se passe avec les tâches cron de l'ensemble du système (non spécifiques à un utilisateur et provenant de /etc/crontab). Le problème est que les gens ne configurent pas toujours un démon de messagerie (c'est-à-dire un agent de transfert de courrier (MTA) comme sendmail, qmail ou postfix) sur la plupart des systèmes d'exploitation de type Unix. Ainsi, les courriels de sortie de la tâche cron meurent dans un dossier de spool local quelque part, s'ils ne sont même pas reçus. que loin. Une solution pourrait donc être de lancer votre démon de messagerie, et de vous assurer que vous avez un fichier ~/.forward pour transférer votre courrier local vers votre "vrai" compte de messagerie.

Si vous voulez que vos tâches écrivent dans des fichiers de log spécifiques, vous pouvez utiliser la redirection de la sortie standard comme @honk l'a suggéré, ou, en supposant que votre tâche cron est un Shell Shell, vous pourriez faire en sorte que votre Shell appelle logger(1) ou syslog(1) ou tout autre outil de ligne de commande que votre OS fournit pour envoyer des messages arbitraires à syslog. Ensuite, vous pourriez utiliser les méthodes intégrées de votre système d'exploitation pour configurer quels types de messages sont enregistrés, peut-être en éditant /etc/syslog.conf.

La plupart de mes tâches cron invoquent des bash scripts que j'ai écrits spécifiquement dans le but d'être lancés par cron pour une raison particulière. Dans ces cas, surtout lorsque je les écris et les débogue initialement, j'aime utiliser le "set -vx" de bash pour que la forme non développée et développée de chaque ligne du scripts scripts soit écrite sur stdout avant d'être exécutée. Notez que les scripts scripts démarrés à partir de cron sont considérés comme des shells non-login, non-interactifs, donc vos scripts standard de démarrage scripts comme .bashrc et .profile ne sont pas exécutés. Si vous utilisez bash et voulez que bash exécute un scripts de démarrage, vous devez définir une variable d'environnement "BASH_ENV=/path/to/my/startup/scripts" dans votre crontab avant la ligne où vous définissez le job.

5voto

Lars Truijens Points 24005

Les tâches que cron exécute sont responsables de leur propre journalisation.

4voto

Rob Points 221

Je pense que la redirection dans le fichier cron n'est peut-être pas la meilleure option dans ce cas.

Souvent, vous voulez que la spécification de journalisation soit co-localisée avec la tâche cron script. Dans ce cas, je suggère ce qui suit :

#!/bin/bash
exec &>> capture-log.txt
echo "Running cron-job foo at $(date)"
...
<rest of script>

Ceci ajoute la sortie de la tâche cron au fichier capture-log.txt.

3voto

Andrei Pokrovsky Points 101

Je préfère recevoir des rapports par e-mail sur les tâches cron. Il suffit de mettre

MAILTO=yourmail@domain.com

dans crontab et vous recevrez un e-mail. Bien sûr, vous devez avoir configuré l'e-mail pour votre compte.

Informations complémentaires : Vous pouvez mettre MAILTO avant chaque ligne dans votre crontab pour spécifier différents e-mails :

MAILTO=mail1@domain.com
0 1 * * *     <job at 1 a.m. sent to mail1>
MAILTO=mail2@domain.com
0 2 * * *     <job at 2 a.m. sent to mail2>

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