Je veux savoir comment je peux voir exactement ce que les tâches cron font à chaque exécution. Où se trouvent les fichiers journaux? Ou puis-je envoyer la sortie à mon email? J'ai défini l'adresse électronique à laquelle envoyer le journal lorsque le travail périodique est exécuté, mais je n'ai encore rien reçu.
* * * * * myjob.sh >> /var/log/myjob.log 2>&1
enregistrera toutes les sorties du travail cron dans /var/log/myjob.log
Vous pouvez utiliser mail
pour envoyer des courriels. La plupart des systèmes envoient par courrier électronique la sortie des travaux non gérés cron
à root ou à l'utilisateur correspondant.
Par défaut, cron enregistre dans/var/log/syslog pour que vous puissiez voir les entrées associées à cron en utilisant:
grep CRON /var/log/syslog
https://askubuntu.com/questions/56683/where-is-the-cron-crontab-log
Il existe au moins trois types de journalisation différents:
La journalisation AVANT l'exécution du programme, qui ne consigne que SI le Cronjob TRIED pour exécuter la commande. Celui-ci est situé dans/var/log/syslog, comme déjà mentionné par @Matthew Lock.
La consignation des erreurs APRÈS que le programme ait essayé de s’exécuter, ce qui peut être envoyé à un e-mail ou à un fichier, comme mentionné par @Siffiffster. 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 de l’envoi et de la réception du courrier électronique fonctionne parfaitement. Parfois c'est le cas, parfois non. Par exemple, sur un ordinateur de bureau commun simple qui ne vous intéresse pas Configurer un smtp, vous préférerez parfois vous connecter à un fichier:
* * * * COMMAND_ABSOLUTE_PATH > /ABSOLUTE_PATH_TO_LOG 2>&1
Il existe des sources courantes de problèmes avec les tâches cron: * Le CHEMIN ABSOLU du binaire à exécuter. Quand vous le lancez à partir de votre Shell, ça pourrait marcher, mais le processus cron semble en utiliser un autre environnement, et par conséquent, il ne trouve pas toujours les fichiers binaires si vous ne le faites pas utilisez le chemin absolu . * Les BIBLIOTHÈQUES 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, vous vous référez au binaire qui utilise exactement la même bibliothèque, ou mieux, vérifiez si le binaire auquel vous faites référence avec le chemin absolu est le même que vous vous référez lorsque vous utilisez la console directement. Les fichiers binaires peuvent être trouvés à l'aide de la commande localize, par exemple:
$locate python
Assurez-vous que le fichier binaire que vous allez référencer est identique à celui 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.
Voici mon code:
* * * * * your_script_fullpath >> your_log_path 2>&1
Sur Ubuntu, vous pouvez activer un fichier cron.log
pour ne contenir que les entrées CRON.
Décommentez la ligne qui mentionne cron
dans le fichier /etc/rsyslog.d/50-default.conf
:
# Default rules for rsyslog.
#
# For more information see rsyslog.conf(5) and /etc/rsyslog.conf
#
# First some standard log files. Log by facility.
#
auth,authpriv.* /var/log/auth.log
*.*;auth,authpriv.none -/var/log/syslog
#cron.* /var/log/cron.log
Enregistrez et fermez le fichier, puis redémarrez le service rsyslog
:
Sudo systemctl restart rsyslog
Vous pouvez maintenant voir les entrées du journal cron dans son propre fichier:
Sudo tail -f /var/log/cron.log
Exemples de sortie:
Jul 18 07:05:01 machine-Host-name CRON[13638]: (root) CMD (command -v debian-sa1 > /dev/null && debian-sa1 1 1)
Cependant, vous ne verrez pas plus d'informations sur les scripts réellement exécutés dans /etc/cron.daily
ou /etc/cron.hourly
, à moins que ces scripts ne dirigent la sortie vers le fichier cron.log (ou peut-être dans un autre fichier journal).
Si vous voulez vérifier si une crontab est en cours d'exécution et ne pas avoir à le rechercher dans cron.log
ou syslog
, créez une crontab qui redirige la sortie vers un fichier journal de votre choix - quelque chose comme:
# For more information see the manual pages of crontab(5) and cron(8)
#
# m h dom mon dow command
30 2 * * 1 /usr/local/sbin/certbot-auto renew >> /var/log/le-renew.log 2>&1
Étapes prises à partir de: https://www.cyberciti.biz/faq/howto-create-cron-log-file-to-log-crontab-logs-in-ubuntu-linux/
Si vous exécutez une commande avec Sudo, cela ne le permettra pas. Sudo a besoin d'un tty.
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 le fichier crontab
pour que les courriels soient envoyés à un autre compte.
Pour que cela fonctionne, le courrier doit fonctionner correctement. Livrer dans une boîte aux lettres locale n'est généralement pas un problème (en fait, il est probable que ls -l "$MAIL"
révélera que vous en avez déjà reçu), mais le faire sortir de la boîte et sur Internet nécessite le MTA (Postfix, Sendmail, etc.). être correctement configuré pour se connecter au monde.
Si vous souhaitez toujours vérifier vos tâches cron, vous devez fournir un .__ valide. compte de messagerie lors de la définition des tâches Cron dans cPanel.
Lorsque vous spécifiez un courrier électronique valide, vous recevez la sortie du travail cron exécuté. Ainsi, vous pourrez le vérifier et vous assurer que tout a été exécuté correctement. 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 email pour chacune des tâches cron exécutées. Cela pourrait inonder votre boîte de réception au cas où votre cron fonctionnerait trop souvent