Berikut ini berfungsi seperti yang diharapkan dari prompt perintah. Tapi itu tidak berhasil dari 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
Saya mendapatkan kesalahan berikut:
/bin/sh: -c: line 0: syntax error near unexpected token `('
Apakah karakter-karakter tertentu perlu melarikan diri dalam cron? Atau itu masalah dengan subkulit di cron?
Jawaban:
Saya akan memperluas apa yang dikatakan SvenW dengan menyatakan bahwa saya akan memasukkan perintah ini ke dalam skrip karena dua alasan:
/root/bin/dump_mysql_tables_and_email_failure_report.sh
. Anda mungkin tidak berada dalam lingkungan dengan administrator lain, tetapi ini akan mengingatkan Anda apa yang Anda pikirkan setahun dari sekarang! :)sumber
Solusi termudah untuk mengatasi masalah cron: Masukkan perintah di skrip shell itu sendiri dan panggil skrip ini dari cron.
sumber
Alasannya tidak berhasil adalah itu
cron
tidak berhasilbash
. Membuat subkulit menggunakan tanda kurung adalah bagian dari sintaks bash. Petunjuk untuk ini adalah "kata" pertama dari pesan kesalahan.Backticks akan berfungsi untuk membuat subkulit kecuali bahwa Anda sudah menggunakan backtick di dalam subkulit Anda sehingga Anda tidak dapat menggunakannya lagi.
Seperti yang sudah dikatakan orang lain, tulis skrip dan panggil itu dari cron.
sumber