![Hinzufügen eines Zeitstempels zur Protokolldatei über den Cronjob-Befehl](https://rvso.com/image/36009/Hinzuf%C3%BCgen%20eines%20Zeitstempels%20zur%20Protokolldatei%20%C3%BCber%20den%20Cronjob-Befehl%20.png)
Ich versuche, den Befehl „Git Pull“ auszuführen und die Ausgabenachricht alle 5 Minuten in einer Datei zu protokollieren.
Aber ich habe einen Fehler wie diesen,
(root) CMD (cd /var/www/sites/ && git pull origin master | sed -e "s/^/$(date +\")
(CRON) error (grandchild #1111 failed with exit status 2)
Mein Cronjob-Befehl lautet wie folgt.
*/5 * * * * cd /var/www/site/ && git pull origin master | sed -e "s/^/$(date +\"%d-%m-%y\ %T\"), /" >> /var/log/crond/site.log
Wie kann das Problem behoben werden?
Antwort1
Beachten Sie, dass für einige Systeme a %
in einer Crontab speziell ist: aus crontab(5) auf meinem System
Das "sechste" Feld (der Rest der Zeile) gibt den auszuführenden Befehl an. Der gesamte Befehlsteil der Zeile, bis auf ein Zeilenumbruch- oder "%"-Zeichen, wird von /bin/sh oder von der Shell ausgeführt, die in der SHELL-Variable der Cronfile angegeben ist. Ein "%"-Zeichen im Befehl wird, sofern es nicht mit einem Backslash (\) maskiert ist, in ein Zeilenumbruchzeichen geändert und alle Daten nach dem ersten % werden als Standardeingabe an den Befehl gesendet.
ICHstarkIch empfehle die Verwendung des Datumsformats %Y-%m-%d
- es ist nicht nurein Standard, es sortiert lexikalisch und chronologisch gleich. Einige strftime-Implementierungen haben eine Abkürzung dafür:%F
Überprüfen Sie, ob Ihr System über einets
Befehl
cd /dir && git pull origin master 2>&1 | ts "\%F \%T" >> /var/log/crond/site.log
Um Zeitstempel in „Echtzeit“ zu erhalten, müssen Sie den Befehl möglicherweise entpuffern: (das wird langsam wirklich hässlich)
cd /dir && stdbuf -oL sh -c 'git pull origin master 2>&1' | ts "\%F \%T" >> /var/log/crond/site.log