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
- Trouver les fichiers journaux des tâches cron
- Configurer ce qui est enregistré
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
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
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.
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.
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>
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.