Następujące działa zgodnie z oczekiwaniami z wiersza polecenia. Ale to nie działa z crona.
mysqldumpslow <(tail -1000 `mysqladmin variables \
| grep slow_query_log_file | awk '{print $4}'`) \
| mail -s "slow log from `hostname` sorted by time" shantanu.oak`hostname`@gmail.com \
> /root/slow_succ.txt 2> /root/slow_err.txt
Otrzymuję następujący błąd:
/bin/sh: -c: line 0: syntax error near unexpected token `('
Czy niektóre postacie wymagają ucieczki w cron? Czy jest to problem z podpowłoką w cronie?
Odpowiedzi:
Omówię to, co powiedział SvenW , stwierdzając, że wstawię to polecenie do skryptu z dwóch powodów:
/root/bin/dump_mysql_tables_and_email_failure_report.sh
. Być może nie jesteś w środowisku z innymi administratorami, ale to pomoże ci przypomnieć sobie, o czym myślałeś za rok! :)źródło
Najłatwiejsze rozwiązanie problemów związanych z ucieczką crona: umieść polecenie we własnym skrypcie powłoki i po prostu wywołaj ten skrypt z crona.
źródło
Powodem, dla którego nie działa, jest to, że
cron
nie jestbash
. Tworzenie podpowłoki za pomocą nawiasów jest częścią składni bash. Wskazówką na to jest pierwsze „słowo” komunikatu o błędzie.Backticks działałby, aby utworzyć podpowłokę, z wyjątkiem tego, że już używasz backsicków w swojej podpowłoce, więc nie możesz ich ponownie użyć.
Jak już powiedzieli inni, napisz skrypt i wywołaj go z crona.
źródło