Следующее работает, как и ожидалось, из командной строки. Но это не работает от 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
Я получаю следующую ошибку:
/bin/sh: -c: line 0: syntax error near unexpected token `('
Нужно ли экранировать некоторых персонажей в cron? Или это проблема с subshell в cron?
Ответы:
Я более подробно остановлюсь на том, что сказал SvenW , заявив, что я поместил бы эту команду в скрипт по двум причинам:
/root/bin/dump_mysql_tables_and_email_failure_report.sh
. Возможно, вы не находитесь в окружении других администраторов, но это будет напоминать вам, какого чёрта вы думали через год! :)источник
Самое простое решение проблем с выходом из cron: поместите команду в собственный скрипт оболочки и просто вызовите этот скрипт из cron.
источник
Причина, по которой это не работает, заключается в том, что
cron
это не такbash
. Создание подоболочки с использованием скобок является частью синтаксиса bash. Ключ к этому лежит в первом «слове» сообщения об ошибке.Обратные метки будут работать для создания подоболочки, за исключением того, что ты уже используешь обратные метки внутри своей подоболочки, поэтому ты не сможешь использовать их снова.
Как уже сказали другие, напишите скрипт и позвоните в cron.
источник