Je vois tellement de guides sur la façon de faire fonctionner crontab, mais ce dont j'ai besoin maintenant, c’est d’apprendre à
Vérifiez si les programmes que vous exécutez avec cron ont leurs propres fichiers journaux. Si ce n'est pas le cas, écrivez leur sortie sur les sorties standard, vous pouvez les rediriger vers des fichiers ou les envoyer par la poste. À l'intérieur des crontabs redirection Shell standard fonctionne.
Par exemple. pour rediriger la sortie d'erreur de some_job.sh
vers some_job.err
et ignorer 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 à la place (si mail
est disponible)
33 3 * * * /path/to/some_job.sh 1> /dev/null 2>&1 | mail -s "cron output" [email protected]
La plupart des démons cron sur les plates-formes avec lesquelles j'ai travaillé envoient automatiquement un courrier électronique au stdout/stderr des tâches utilisateur cron à l'utilisateur dont provient la tâche crontab. J'oublie ce qui se passe dans l'ensemble du système (tâches cron non spécifiques à l'utilisateur provenant de/etc/crontab). Le problème, c’est que les gens ne configurent plus toujours un démon de messagerie (c’est-à-dire un agent de transfert de courrier (MTA) tel que sendmail, qmail ou postfix) sur la plupart des systèmes d’exploitation de type Unix. Ainsi, les e-mails de sortie du travail cron meurent dans un dossier de spool de courrier local quelque part s’ils obtiennent même que loin. Donc, une solution pourrait ê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 souhaitez que vos travaux écrivent dans des fichiers journaux spécifiques, vous pouvez utiliser la redirection de sortie standard comme suggéré par @honk. Si votre travail cron est un script Shell, vous pourriez avoir votre script call logger (1) ou syslog (1) ou quel que soit l’outil de ligne de commande fourni par votre système d’exploitation pour l’envoi de messages arbitraires à syslog. Vous pouvez ensuite utiliser les méthodes intégrées de votre système d’exploitation pour configurer les types de messages consignés où, peut-être en modifiant /etc/syslog.conf.
La plupart de mes tâches cron font appel aux scripts bash que j'ai écrits spécialement pour être lancés par cron pour une raison particulière. Dans ceux-ci, en particulier lorsque je les écris et les débogue initialement, j'aime utiliser "set -vx" de bash pour que la forme non développée et développée de chaque ligne du script Shell soit écrite sur stdout avant d'être exécutée. Notez que les scripts Shell lancés à partir de cron sont considérés comme des shells non interactifs. Par conséquent, vos scripts de démarrage Shell standard, tels que .bashrc et .profile, ne sont pas exécutés. Si vous utilisez bash et souhaitez que bash exécute un script de démarrage, vous devez définir une variable d'environnement "BASH_ENV =/chemin/vers/mon/démarrage/script" dans votre crontab avant la ligne où vous définissez le travail.
Les tâches que cron est en train d'exécuter sont responsables de leur propre journalisation.
Le moyen le plus simple est de capturer les erreurs d’impression et de les enregistrer dans un fichier. J'ai un cronjob qui appelle une ligne de commande php, comme ceci:
1 0 * * * php /pathOfMyApp/index.php controllerName nomFonction>/cheminOfMonApp/log/myErrorLog 2> & 1
La partie avant ">", c'est mon travail principal et après ">", la capture et la sauvegarde dans un fichier situé dans un dossier de journal à la racine de mon projet, mais pouvant se trouver à l'emplacement souhaité. Soyez vigilant: chaque fois que cronjob sera appelé, il écrasera le dernier journal. Vous pouvez utiliser '>>' pour écrire à la fin d'un fichier existant ou rechercher la commande de terminal 'cat'.
Si votre crontab utilise 'curl' ou 'wget' et fait référence à un lien, vous pouvez rechercher dans/var/log/httpd/appName pour access-log, si cron revient avec 500 ou 400, quelque chose ne va pas.
Enfin, vous pouvez aussi vérifier/var/log/messages.
Je préfère recevoir des rapports par courrier électronique sur les tâches cron. Il suffit de mettre
dans crontab et vous recevrez un email. Bien sûr, vous devez configurer la messagerie électronique pour votre compte.
Je pense que la redirection dans le fichier cron pourrait ne pas être la meilleure option dans ce cas.
Souvent, vous souhaitez que la spécification de journalisation soit co-localisée avec le script de travail cron. 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>
Cela ajoute la sortie du travail cron au fichier capture-log.txt.