GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana saya bisa membuat loop tak terbatas yang mematikan proses jika ada sesuatu yang ditemukan di dmesg?

Beberapa masalah:

  • Anda menjalankan ini dalam loop sibuk, yang akan menghabiskan sumber daya sebanyak mungkin. Ini adalah salah satu contoh di mana sleep ing mungkin bisa dibenarkan.
  • Namun, versi terbaru dari dmesg memiliki bendera untuk mengikuti keluaran, sehingga Anda dapat menulis ulang semuanya sebagai (belum diuji)

    while true
    do
        dmesg --follow | tail --follow --lines=0 | grep --quiet 'BUG: workqueue lockup'
        killall someprocessname
    done
    
  • Kode harus diindentasi agar dapat dibaca.
  • Benar-benar aneh, tapi [ sama dengan test - lihat help [ .

Varian dari jawaban @l0b0:

dmesg --follow | awk '
   /BUG: workqueue lockup/  { system ("killall someprocessname") ; rem="done at each occurrence. You could add further things, like print to a logfile, etc.,"
        }'

Ini mari awk lakukan perulangan, yang memiliki beberapa keuntungan:

  • itu akan bekerja sampai proses itu mati.
  • Itu juga tidak memanggil lebih dari 1 killall per kemunculan string penelusuran "BUG:workqueue lockup", yang menyempurnakan jawaban lainnya.

Untuk menguji:Anda dapat memasukkan ini ke dalam skrip bernama thescript , dan lakukan nohup thescript & , sehingga thescript akan terus berjalan bahkan setelah Anda keluar dari sesi.

Setelah Anda puas itu berfungsi, matikan, dan kemudian Anda bisa (alih-alih menjalankannya setiap kali di shell dengan nohup ) mengubahnya menjadi daemon script yang kemudian dapat Anda mulai di runlevel Anda saat ini.

yaitu:menggunakan skrip lain sebagai model (Anda harus memiliki setidaknya bagian mulai, berhenti, dan status), Anda dapat memodifikasi thescript dengan tepat lalu tempatkan di dalam /etc/rc.d/init.d , dan memiliki symlink untuk itu bernama Sxxthescript di bawah /etc/rc.d/rcN yang sesuai , N menjadi angka untuk runlevel normal Anda (lihat baris teratas who -a untuk mengetahui run-level saat ini). Dan memiliki Kxxthescript yang sesuai symlink juga, di setiap (atau hampir setiap) runlevel, sehingga skrip dimatikan dengan tepat saat beralih runlevel.

Atau lakukan "hal yang sesuai" untuk menjalankan/menghentikannya melalui systemd atau sistem setara apa pun yang digunakan distribusi Anda.


Linux
  1. Cara Membuat Script Perintah Linux

  2. Bagaimana Membuat File Sementara Di Shell Script?

  3. Bagaimana saya bisa menulis skrip bash Linux yang memberi tahu saya komputer mana yang AKTIF di LAN saya?

  1. Bagaimana saya bisa tahu proses mana yang menggunakan swap?

  2. Bagaimana saya bisa membuat pengguna yang tidak masuk?

  3. Bagaimana saya bisa memasang gambar disk?

  1. Empat Tugas Secara Paralel… Bagaimana Melakukannya?

  2. Bagaimana Saya Dapat Membuat File Dump dari Proses yang Berjalan di Linux?

  3. Bagaimana saya bisa menulis ke dmesg dari baris perintah?