O seguinte funciona como esperado no prompt de comando. Mas isso não funciona no cron.
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
Estou tendo o erro a seguir:
/bin/sh: -c: line 0: syntax error near unexpected token `('
Alguns caracteres precisam ser escapados no cron? Ou é um problema com o subshell no cron?
Respostas:
Vou expandir o que o SvenW disse, afirmando que eu colocaria esse comando em um script por dois motivos:
/root/bin/dump_mysql_tables_and_email_failure_report.sh
. Você pode não estar em um ambiente com outros administradores, mas isso servirá para lembrá- lo de que diabos você estava pensando daqui a um ano! :)fonte
A solução mais fácil para problemas de escape do cron: Coloque o comando em seu próprio script de shell e chame esse script do cron.
fonte
A razão pela qual não funciona é que
cron
não ébash
. Criar um subshell usando colchetes faz parte da sintaxe do bash. Uma pista para isso está na primeira "palavra" da mensagem de erro.Os backticks trabalhariam para criar um subshell, exceto que você já está usando backticks dentro do subshell, para que não possa usá-los novamente.
Como os outros já disseram, escreva um script e chame isso de cron.
fonte