Les éléments suivants fonctionnent comme prévu à partir de l'invite de commandes. Mais cela ne fonctionne pas depuis 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
J'obtiens l'erreur suivante:
/bin/sh: -c: line 0: syntax error near unexpected token `('
Certains personnages doivent-ils être échappés dans cron? Ou est-ce un problème avec le sous-shell dans cron?
Réponses:
Je développerai ce que SvenW a dit en déclarant que je mettrais cette commande dans un script pour deux raisons:
/root/bin/dump_mysql_tables_and_email_failure_report.sh
. Vous n'êtes peut-être pas dans un environnement avec d'autres administrateurs, mais cela vous rappellera ce que vous pensiez dans un an! :)la source
La solution la plus simple pour les problèmes d'échappement cron: Mettez la commande dans son propre script shell et appelez simplement ce script depuis cron.
la source
La raison pour laquelle cela ne fonctionne pas est que
cron
nonbash
. La création d'un sous-shell à l'aide de crochets fait partie de la syntaxe bash. Un indice à cela se trouve dans le premier "mot" du message d'erreur.Les backticks fonctionneraient pour créer un sous-shell, sauf que vous utilisez déjà des backticks à l'intérieur de votre sous-shell, vous ne pouvez donc pas les réutiliser.
Comme les autres l'ont déjà dit, écrivez un script et appelez-le depuis cron.
la source