Salah satu tugas saya mengimpor database Oracle menggunakan impdp
.
Ini menghasilkan banyak output ke konsol jadi saya telah mengatur no_log: True
.
Namun, ketika ini gagal saya ingin melihat log!
Bagaimana saya bisa membuat log tugas khusus ini ke file dan bukan ke konsol?
failed_when
kondisi, dan menghapus file log, jika sebelumnya. tugas berhasil :)-vvv
setelahansible-playbook
perintah untuk mendapatkan log verbose.Jawaban:
[Konversi komentar saya menjadi jawaban]
Salah satu cara untuk melakukannya adalah dengan menulis log ke beberapa file eksternal, dan kemudian memiliki tugas setelah itu yang menggunakan kondisi fail_when, dan menghapus file log, jika tugas sebelumnya berhasil.
Sesuatu seperti ini akan membantu Anda.
Catatan: Ini mungkin bukan cara terbaik untuk menangani masalah Anda. Tapi, ini adalah retasan yang membantu saya melakukan pendataan dan pemantauan.
sumber
Saya pikir yang perlu Anda lakukan adalah mendaftarkan output dari setiap perintah yang Anda butuhkan (menyimpannya dalam variabel) dan kemudian hanya membuang variabel dalam file. Dengan begitu Anda bisa memeriksanya nanti.
Kemudian di dumpall.j2:
Contoh yang saya gunakan adalah dari sini
sumber
Saya memecahkan ini dengan menambahkan
ke tugas no_log. Ini memungkinkan melanjutkan ke tugas berikutnya, bahkan ketika tugas gagal. Kemudian untuk tugas selanjutnya tentukan tugas debug, yang selalu gagal dan menampilkan variabel terdaftar, tetapi hanya berjalan ketika tugas sebelumnya gagal:
Begitu pun dengan no_log: true, ini akan memungkinkan menampilkan hasil tugas yang gagal. Solusi ini tidak masuk ke file seperti yang diminta tetapi memenuhi kebutuhan Anda untuk 'melihat log ketika gagal', dan tentu saja, Anda dapat mengarahkan atau menggunakan tee untuk menampilkan hasil lengkap yang mungkin ke file, yang akan, dengan solusi ini juga berisi log dari tugas yang gagal.
sumber
Apa yang saya lakukan ketika saya memiliki perintah untuk dieksekusi dan ingin mendapatkan log hanya jika terjadi kegagalan adalah sebagai berikut (diawali oleh comamnd shell seperti
/bin/sh -c '...'
jika inisiator tidak menggunakansystem
panggilan atau menjalankan perintah secara langsung tanpa shell) :Ini akan mengarahkan kesalahan dan output standar ke file dan menampilkan konten file jika terjadi kegagalan saja. Jika perintahnya sangat bertele-tele dan Anda tidak ingin menyimpan log ketika tidak apa-apa, Anda bisa menggunakannya:
Kutipan untuk
&&
dan||
penggunaan dari sh manpage :Itu mungkin bukan cara yang paling idiomatis untuk melakukannya dengan mungkin tetapi memiliki keuntungan menjadi sangat portabel dengan sistem manajemen konfigurasi yang memberikan kemampuan untuk menampilkan perintah stdout.
sumber
Dengan asumsi dimungkinkan melemparkan kesalahan ke stderr Anda dapat menangkap output kesalahan dalam program apa pun ke file menggunakan pengalihan output:
some command 2> error.log
Namun saya tidak berpikir ini masalahnya.
Sebaliknya Anda akan cenderung ingin merujuk ke panduan ini untuk memutuskan kapan akan terjadi kesalahan http://docs.ansible.com/ansible/playbooks_error_handling.html dan kemudian grep output untuk string yang menunjukkan kesalahan sebelum keluaran ke file
yaitu.
ansible-playbook my-playbook | grep 'error' > error.log
sumber
Saya pikir apa yang Anda cari mungkin terlalu redirect stdout dan jalan ke file.
Biasanya, some-command &> logfile.log
atau varian ....
sumber
Tee akan menjadi alat yang sangat sederhana untuk masuk, Anda dapat merujuk perintah berikut.
sumber