Senden der Cron-Ausgabe an eine Datei mit einem Zeitstempel im Namen

37

Ich habe eine Crontab wie diese in einem LAMP-Setup:

0 0 * * * /some/path/to/a/file.php > $HOME/cron.log 2>&1

Dadurch wird die Ausgabe der Datei in die Datei cron.log geschrieben . Wenn es jedoch erneut ausgeführt wird, wird alles überschrieben, was zuvor in der Datei enthalten war.

Wie kann ich Cron dazu bringen , eine Datei mit einem Zeitstempel im Dateinamen auszugeben?

Ein Beispiel für einen Dateinamen wäre: 2010-02-26-000000-cron.log

Das Format interessiert mich nicht wirklich, solange es einen Zeitstempel hat.

Danke im Voraus.

Philip Morton
quelle
8
Wenn Sie nicht $HOME/cron.logüberschrieben werden möchten , verwenden Sie >>nicht>
Dave Cheney

Antworten:

65

Versuchen:

0 0 * * * /some/path/to/a/file.php > $HOME/`date +\%Y\%m\%d\%H\%M\%S`-cron.log 2>&1

Spielen Sie mit dem Datumsformat, wenn Sie möchten; nur sicher sein , jeden zu entkommen %wie \%wie oben.

Fission
quelle
Und lassen Sie mich generell einen Ansatz für Dateinamen wie 0 0 * * * /some/path/to/a/file.php > $HOME/scriptname-Datum + \% Y \% m \% d \% H \% M \% S vorschlagen.log
Kristian
Wenn Sie es etwas besser lesbar brauchen, versuchen Sie: date +\%Y\ \%m\ \%d\ \%H:\%M:\%S-cron.log
DevilCode
4
@ DevilCode, ja, obwohl Leerzeichen in Dateinamen in Unix nicht sehr konventionell sind. Bindestriche oder Unterstrichen könnte eine bessere Option sein: date +\%Y-\%m-\%d_\%H:\%M:\%S-cron.log.
Spaltung
1
Diese verdammten Fluchtfiguren haben mich immer erwischt. Danke für die Erinnerung!
Tony-Caffe
13

Ich würde empfehlen, dass Sie alles in der gleichen Datei mit Zeitstempel speichern, wie hier erklärt .

Löschen

2> & 1

und führen Sie es durch das Zeitstempelskript aus, bevor Sie es in einer Protokolldatei speichern (wie im obigen Link erläutert).

Tony Gil
quelle
6

Sie können Ihre Ausgabe auch wie folgt an die Protokolldatei anhängen:

0 0 * * * /some/path/to/a/file.php >> $HOME/cron.log 2>&1
Bis auf weiteres angehalten.
quelle
0

Ich habe das Skript folgendermaßen modifiziert:

`/bin/date +\%Y\%m\%d`.log
Ardhy
quelle
-2

Ich habe dieses Problem gelöst. Fügen Sie einfach den Datumspfad (/ bin / date) vor dem Datumsbefehl hinzu.

user213005
quelle
2
Bitte fügen Sie weitere Informationen und Beispiel.
Danijel
-2
@daily /some/path/to/a/file.php 2>&1 > $HOME/$(date +\%Y\%m\%d\%H\%M\%S)-cron.log
Ivan Kovtun
quelle
5
Dies wäre sehr erklärungsbedürftig.
Sven