8 votes

Comment vérifier si la tâche cron fonctionne ?

J'utilise crontab -e sans sudo pour éditer les tâches cron et ajouter la ligne suivante -

20 22 23 10 * date "+%Y-%m-%d %H:%M:%S" >> ~/Documents/log.txt

ensuite je vérifie le fichier journal et il ne contient pas la date et l'heure.

J'ai essayé de modifier crontab en tant que root, mais cela ne met également pas à jour le fichier. Qu'est-ce qui pourrait ne pas aller ici? Y a-t-il un moyen de voir les journaux de l'exécution des tâches cron?

P.S. Mise à jour du crontab créée sous root:

0/5 * * * * /bin/date "+%Y-%m-%d %H:%M:%S" >> /tmp/log.txt
0/5 * * * * echo >> /tmp/log2.txt

log2.txt est maintenant créé.

7voto

Douglas Points 10417

Vos messages d'erreurs cron sont envoyés au compte mail de l'utilisateur qui exécute la tâche cron.

Tapez mail sur la ligne de commande pour voir les messages. Pour une liste des commandes mail, consultez man mail.

Vous devriez recevoir un e-mail avec un message d'erreur ressemblant à :

/bin/sh : -c : ligne 0: fin de fichier inattendue en cherchant un correspondant à `"'
/bin/sh : -c : ligne 1: erreur de syntaxe : fin de fichier inattendue

Concernant votre commande et pourquoi elle ne fonctionne pas, c'est parce que le signe "%" est un caractère "nouvelle ligne", ce qui signifie qu'il dit à la shell de "passer à la ligne suivante". Ainsi, après avoir rencontré le premier "%", il passe à la ligne suivante et ne voit jamais le reste de la commande. Cela est confirmé par l'"fin de fichier inattendue en cherchant un correspondant à ' "(double quote).

La page de manuel locale pour crontab (man crontab) est assez sommaire en détails et je suppose que c'est parce que cron a été remplacé par launchd1. Cependant, la page de manuel de crontab de developer.apple.com l'explique

Le "sixième" champ (le reste de la ligne) spécifie la commande à exécuter. Toute la partie de la commande de la ligne, jusqu'à un caractère de nouvelle ligne ou %, sera exécutée par /bin/sh ou par la shell spécifiée dans la variable SHELL du fichier cron. Les signes de pourcentage (%) dans la commande, sauf s'ils sont échappés avec un backslash (\), seront transformés en caractères de nouvelle ligne, et toutes les données après le premier % seront envoyées à la commande en tant qu'entrée standard. La commande peut éventuellement être préfixée par "@AppleNotOnBattery" pour indiquer à cron de ne pas exécuter la commande lorsqu'il fonctionne sur batterie. Par exemple, le "sixième" champ lors de l'utilisation de cette option ressemblerait à quelque chose comme : "@AppleNotOnBattery /usr/bin/touch /tmp/foo"

Votre correction :

Donc, ce que vous devez faire, c'est "échapper" le caractère "%" avec un backslash (\) pour qu'il lui dise de l'interpréter littéralement.

Votre commande devrait être :

0/5 * * * * /bin/date "+\%Y-\%m-\%d \%H:\%M:\%S" >> /tmp/log.txt

1 De man crontab : (Note pour Darwin: Bien que cron(8) et crontab(5) soient officiellement pris en charge sous Darwin, leur fonctionnalité a été absorbée par launchd(8), qui fournit un moyen plus flexible d'exécuter automatiquement des commandes. Voir launchctl(1) pour plus d'informations.)

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X