File log saya akan dibuang dengan pesan berikut saat menjalankan skrip shell menggunakan beberapa perintah MySQL yang mendasarinya.
Ini pesannya:
"Peringatan: Menggunakan kata sandi pada antarmuka baris perintah dapat menjadi tidak aman."
Untuk menghentikan pesan-pesan ini, saya menggunakan definisi pekerjaan berikut.
Contoh:
run_wrapper.sh |grep -v "Warning: Using a password" > output.log 2>&1
Ini berhasil tetapi kesalahan MySQL tidak sedang login output.log
.
Jika saya mengubah definisi seperti berikut, maka kesalahan MySQL mulai muncul jika ada
run_wrapper.sh > output.log 2>&1
Jadi pertanyaannya adalah bagaimana cara menekan pesan peringatan dan juga melaporkan kesalahan SQL dalam file log hanya menggunakan definisi cron?
shell-script
logs
io-redirection
mysql
jvvada jagadish
sumber
sumber
run_wrapper.sh >> output.log 2>&1
-p
opsi pada baris perintah. Alih-alih memperbaikinya (misalnya dengan membuat~/.my.cnf
dengan 600 perm) OP ingin mengabaikan dan membuang peringatan (dan hanya peringatan itu, tidak semua stderr)Jawaban:
Di skrip bash Anda, edit di bagian atas
dan permintaan mysql seperti:
mysql -u username -h host db -e "statement"
Referensi: Dari jawaban yang diposting di Stackoverflow . Jawaban lain juga bisa diikuti.
sumber
cari baris di pembungkus Anda yang mirip dengan
dan ubah ke
ini memecahkan sumber peringatan.
sumber
Sepertinya Anda melewatkan pengarahan stderr dari
run_wrapper.sh
dirinya sendiri, sehingga kesalahan tidak melaluigrep
dan kemudian ke file log.Coba ini sebagai gantinya jika Anda senang memiliki stdout dan sdterr yang ditulis ke file log Anda
Atau jika Anda hanya menginginkan kesalahan yang ditulis ke logfile, dan stdout menulis ke terminal panggilan, coba ini
sumber
Coba ini:
Arahkan ulang stderr melalui Substitusi Proses ke
grep -v ...
, dan output dari yang ditambahkan>>
keoutput.log
Anda mungkin ingin menggunakan (GNU)
grep
's--line-buffered
pilihan serta-v
untuk membuat output memastikan kesalahan tidak tertunda.Jika post-processing file log adalah pilihan yang dapat diterima untuk Anda, Anda bisa menghapus baris "Peringatan:" yang tidak diinginkan dari file log setelah
run_wrapper.sh
selesai.Fragmen skrip shell berikut menyimpan stempel waktu (dalam
$ts
) dari file log (dalam$lf
) sebelum dijalankansed -i
dan mengembalikannya sesudahnya:Jika Anda perlu mempertahankan inode file log (misalnya karena memiliki tautan keras), gunakan
ed
daripadased
:sumber
-i
(dan sebagian besar bentuk "in-place" editing "). Jika dijalankan segera setelah itu, seharusnya hanya dalam mikrodetik atau detik yang berbeda, tentu saja tergantung pada ukuran logfile.Tapi tidak mungkin perintahd
(delete line)sed
akan membuat baris kosong - apa maksud Anda dengan hal itu?sed
Opsi @jagadishpuvvada sekarang menyimpan dan mengembalikan stempel waktu keluaran.log.Coba tambahkan ini ke akhir perintah Anda:
sumber