Comment vérifier si le travail cron fonctionne?

3

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

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

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

J'ai essayé d'éditer crontab en tant que root, mais il ne met également pas à jour le fichier. Quel pourrait être le problème ici? Existe-t-il un moyen de consulter le journal d'exécution des tâches cron?

P.S. Mettez à jour la 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 créé maintenant.

LA_
la source
crontab ne comprend pas ~ vous devez donner le chemin complet
Mark
@ Mark, j'ai utilisé le chemin complet (au lieu de ~) avec la racine crontab - le résultat est le même, aucun enregistrement dans le fichier.
LA_
Il est également possible que le chemin ne soit pas défini. Utilisez le chemin complet à ce jour. Notez également que pour OSX launchd est préférable à cron.
Mark
@ Mark, j'essaie d'utiliser /bin/date et echo maintenant (voir question mise à jour).
LA_

Réponses:

3

Votre cron les messages d'erreur sont envoyés au mail compte de l'utilisateur qui exécute le cron emploi.

Type mail sur la ligne de commande pour voir les messages. Pour une liste de mail commandes, voir homme mail .

Vous devriez recevoir du courrier avec un message d'erreur ayant les effets suivants:

/bin/sh: -c: line 0: unexpected EOF while looking for matching `"'
/bin/sh: -c: line 1: syntax error: unexpected end of file

En ce qui concerne 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 indique au 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. Ceci est confirmé par le "EOF inattendu lors de la recherche du" "" correspondant (guillemet double).

La page de manuel locale de crontab ( man crontab ) manque de détails et je spécule que c’est parce que cron est déconseillé pour launchd 1 . Cependant, la page de manuel crontab de développeur.apple.com l'explique

Le "sixième" champ (le reste de la ligne) spécifie la commande à exécuter.   courir. La totalité de la partie commande de la ligne, jusqu’à un caractère nouvelle ou%, sera exécutée par / bin / sh ou par le shell spécifié dans la variable SHELL du fichier cronfile. Les signes en pourcentage (%) de la commande, sauf s'ils sont précédés d'une barre oblique inverse (\), sont transformés en caractères de nouvelle ligne et toutes les données suivant le premier% sont envoyées à la commande en tant qu'entrée standard. La commande peut éventuellement être préfixée par " @AppleNotOnBattery "pour dire à cron de ne pas exécuter la commande lorsque la batterie fonctionne. Par exemple, le champ" sixième "lorsqu’on utilise cette option apparaît comme suit: "@AppleNotOnBattery /usr/bin/touch /tmp/foo"


Votre solution:

Donc, ce que vous devez faire, c'est "échapper" le caractère "%" avec une barre oblique inverse (\) afin 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: (Remarque de Darwin: bien que cron (8) et crontab (5) soient officiellement pris en charge par Darwin, leurs fonctionnalités ont été intégrées dans launchd (8), qui offre un moyen plus flexible d’exécuter automatiquement des commandes. Voir launchctl (1) pour plus d’informations. .)

Allan
la source