Ich möchte eine Protokolldatei für ein Cron-Skript erstellen, das die aktuelle Stunde im Namen der Protokolldatei enthält. Dies ist der Befehl, den ich versucht habe zu verwenden:
0 * * * * echo hello >> ~/cron-logs/hourly/test`date "+%d"`.log
Leider bekomme ich diese Meldung wenn das läuft:
/bin/sh: -c: line 0: unexpected EOF while looking for matching ``'
/bin/sh: -c: line 1: syntax error: unexpected end of file
Ich habe versucht, das date
zu maskieren Teil auf verschiedene Weise, aber ohne viel Glück. Ist es möglich, dies inline in einer crontab-Datei zu bewirken, oder muss ich dafür ein Shell-Skript erstellen?
Akzeptierte Antwort:
Kurze Antwort:
Entfliehen Sie dem %
als %
:
0 * * * * echo hello >> ~/cron-logs/hourly/test`date "+%d"`.log
Lange Antwort:
Die Fehlermeldung deutet darauf hin, dass die Shell, die Ihren Befehl ausführt, das zweite Backtick-Zeichen nicht sieht:
/bin/sh: -c: line 0: unexpected EOF while looking for matching '`'
Dies wird auch durch die zweite Fehlermeldung bestätigt, die Sie erhalten haben, als Sie eine der anderen Antworten ausprobiert haben:
/bin/sh: -c: line 0: unexpected EOF while looking for matching ')'
Die crontab-Manpage bestätigt, dass der Befehl nur bis zum ersten nicht maskierten %
gelesen wird Zeichen:
Das „sechste“ Feld (der Rest der Zeile) gibt den auszuführenden Befehl
an. Der gesamte Befehlsteil der Zeile bis zu einem Zeilenumbruch oder %
Zeichen, wird von /bin/sh
ausgeführt oder durch die in
SHELL
angegebene Shell Variable der Cronfile. Prozentzeichen (%
) im Befehl, sofern nicht mit Backslash maskiert ( ), wird geändert in Zeilenumbruch , und alle Daten nach dem ersten
%
wird als Standardeingabe an
den Befehl gesendet.