Mam zdefiniowane następujące zadania cron.
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'
Wygląda na to, że działa poprawnie, jeśli uruchomię powyższe polecenie bezpośrednio z wiersza poleceń. Ale kiedy rano rano sprawdziłem działanie skryptu, dostałem e-mail z informacją (parafrazuję, bo przypadkowo je usunąłem), że tylne tiki nie zostały poprawnie zamknięte.
command-line
cron
Mark D.
źródło
źródło
/bin/sh: 1: Syntax error: EOF in backquote substitution
Do pierwszej pracy crona./bin/sh: 1: Syntax error: Unterminated quoted string
Do drugiego zadania crona.$(...)
pomoże ci poradzić sobie z problemami z cytowaniem ...Odpowiedzi:
Zdecydowanie zalecam umieszczanie wszelkich nietrywialnych zadań cron we własnym pliku skryptu powłoki z wielu powodów:
źródło
%
znaków w skrypcie uniemożliwicron
przekształcenie ich w nowe linie, co jest twoim prawdziwym problemem.Istnieją trzy typowe przyczyny, dla których polecenia zadania cron zachowują się inaczej niż polecenia wpisane bezpośrednio w interaktywnej powłoce, w przybliżonej kolejności:
$PATH
i brak innych oczekiwanych zmiennych./bin/sh
domyślnie, podczas gdy możesz używać innej powłoki interaktywnie.%
znak specjalnie (w poleceniu zamienia się go w nowy wiersz).Musisz poprzedzić wszystkie
%
znaki znakiem\
w pliku crontab, który mówi cronowi, aby po prostu wstawił procent w poleceniu. Pamiętaj, że kiedy używaszdate
polecenia w zadaniu cron.Naprawiłem również problemy z cytowaniem:
$(…)
zamiast tego: jego zasady analizy są prostsze."$somevariable"
,"$(somecommand)"
. Tutaj brak cudzysłowów był nieszkodliwy, ponieważdate
polecenie nigdy nie zwróciło żadnego znaku specjalnego dla używanych formatów, ale musisz uważnie zapamiętać, które znaki są specjalne i sprawdzać to za każdym razem, gdy pozostawiasz zamianę bez cudzysłowu. Upraszczaj, zawsze używaj podwójnych cudzysłowów, chyba że chcesz, aby wynik był dzielony na pola i generowanie nazw plików.źródło
Wygląda na to, że zagnieżdżono się
'
wmutt
poleceniu:Spróbuj użyć
"
zamiast wewnętrznego'
, aby oświadczenie brzmiałoźródło