Ich habe folgende Cron Jobs definiert.
55 8 * * 3 /usr/bin/php /home/mark/dev/processes/customClient/events.php > /home/mark/dev/processes/customClient/events-`date +%Y-%m-%d --date='last Wednesday'`-`date +%Y-%m-%d`.csv
0 9 * * 3 /usr/bin/echo 'The csv for last week, trying my hand at automatiging this' | /usr/bin/mutt <emailaddress> -s 'Events from `date +%Y-%m-%d --date='last Wednesday'`-`date +%Y-%m-%d`' -a '/home/mark/dev/processes/customClient/events-`date +%Y-%m-%d --date='last Wednesday'`-`date +%Y-%m-%d`.csv'
Es scheint richtig zu funktionieren, wenn ich den obigen Befehl direkt über die Befehlszeile ausführe. Aber als ich heute Morgen die Ausführung des Skripts überprüfte, erhielt ich eine E-Mail mit der Aussage (ich paraphrasiere, weil ich sie versehentlich gelöscht habe), dass die hinteren Häkchen nicht richtig geschlossen wurden.
command-line
cron
Mark D
quelle
quelle
/bin/sh: 1: Syntax error: EOF in backquote substitution
Für den ersten Cronjob./bin/sh: 1: Syntax error: Unterminated quoted string
Für den zweiten Cronjob.$(...)
hilft Ihnen bei derAntworten:
Ich empfehle dringend, nicht-triviale Cron-Jobs aus vielen Gründen in ihre eigene Shell-Skriptdatei zu stellen:
quelle
%
Zeichen in das Skriptcron
einfügen, verhindern Sie, dass sie in Zeilenumbrüche umgewandelt werden. Dies ist Ihr eigentliches Problem.Es gibt drei häufige Ursachen für das unterschiedliche Verhalten von Cron-Job-Befehlen im Vergleich zu Befehlen, die direkt in eine interaktive Shell eingegeben wurden.
$PATH
, und andere erwartete Variablen fehlen./bin/sh
standardmäßig auf, während Sie möglicherweise eine andere Shell interaktiv verwenden.%
Charakter besonders (er wird im Befehl in eine neue Zeile umgewandelt).Sie müssen allen
%
Zeichen ein\
in einer crontab-Datei voranstellen , wodurch cron angewiesen wird, nur ein Prozent in den Befehl einzufügen. Denken Sie daran, wenn Sie dendate
Befehl in einem Cron-Job verwenden.Ich habe auch einige Zitatprobleme behoben:
$(…)
stattdessen: Die Parsing-Regeln sind einfacher."$somevariable"
,"$(somecommand)"
. Hier war das Fehlen von Anführungszeichen harmlos, da derdate
Befehl für die von Ihnen verwendeten Formate keine Sonderzeichen zurückgab, Sie sich jedoch genau merken müssen, welche Sonderzeichen besonders sind, und dies jedes Mal überprüfen, wenn Sie eine Ersetzung ohne Anführungszeichen lassen. Halten Sie es einfach, verwenden Sie immer doppelte Anführungszeichen, es sei denn, Sie möchten, dass Feldteilung und Dateinamengenerierung für das Ergebnis durchgeführt werden.quelle
Sie scheinen
'
immutt
Befehl verschachtelt zu sein :Versuchen Sie,
"
anstelle des inneren zu verwenden,'
damit die Anweisung lautetquelle