Oto, co chciałbym zautomatyzować:
00 08 * * * psql -Uuser database < query.sql | mail [email protected] -s "query for `date +%Y-%m-%dZ%I:%M`"
Oto komunikat o błędzie:
/bin/sh: -c: line 0: unexpected EOF while looking for matching ``'
/bin/sh: -c: line 1: syntax error: unexpected end of file
Odpowiedzi:
Z crontab (5) :
Po prostu dodaj odwrotne ukośniki przed znakami%:
źródło
Aby rozwiązać problem, wyjdź z% znaków .
date +%Y-%m-%d
powinno byćdate +\%Y-\%m-\%d
Niestety, ta odpowiedź jest nieco spóźniona, ale problem nie dotyczy ŚCIEŻKI ani odwrotności - chodzi po prostu o to, że znak procentu „%” jest znakiem specjalnym używanym do oznaczenia NEWLINE lub STDIN we wpisach crontab .
Jest to sprzeczne z formatowaniem danych wejściowych
date
polecenia. Jako takie polecenie, które obejmuje:date +%Y-%m-%d
będzie interpretowane jako:date Y- m- d
źródło
Miałem też wiele problemów z backtickami. Czasami potrzebujesz więcej niż jednego wystąpienia cytatów i backticks. Po prostu zamień je na $ ().
Przykład:
-Gilson Soares
źródło
Nie ma to nic wspólnego z backsticksami. Straszne jest to, że cron NIE WIDZIE ŚCIEŻKI, a MUSISZ powiedzieć cronowi „czym jest ŚCIEŻKA?” w kółko w skryptach crona.
I opowiadam się za zapisaniem polecenia w pliku zamiast przekazania polecenia dosłownie w wierszu cron. Jest o wiele bardziej elegancki
niż
linia ta może przejść do jednego pliku, pliku chmod + x i tego pliku, który ma zostać wywołany.
źródło