Una variante della risposta di @ 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.,"
}'
In questo modo facciamo il looping, che presenta alcuni vantaggi:
- funzionerà fino alla fine di tale processo.
- Inoltre, non chiama più di 1
killallper occorrenza della stringa di ricerca "BUG: workqueue lockup", che migliora sull'altra risposta.
Per testare: puoi inserirlo in uno script chiamato thescript, ed eseguirlo nohup thescript &, in modo che thescriptcontinui a funzionare anche dopo aver chiuso la sessione.
Una volta che sei soddisfatto, funziona, uccidilo e poi puoi (invece di eseguirlo ogni volta in una shell con nohup) trasformarlo in un daemon scriptche puoi aver iniziato nel tuo attuale runlevel.
vale a dire: usando un altro script come modello (è necessario disporre almeno delle sezioni start, stop e status), è possibile modificarlo in modo thescriptappropriato e quindi inserirlo all'interno /etc/rc.d/init.de disporre di un collegamento simbolico ad esso denominato Sxxthescriptsotto gli appropriati /etc/rc.d/rcN, Nessendo un numero per il tuo runlevel normale (vedi le prime righe who -aper conoscere l'attuale livello di run). E anche i Kxxthescriptcollegamenti simbolici appropriati , in ogni (o quasi) runlevel, in modo che lo script venga opportunamente ucciso quando si cambia runlevel.
Oppure fai "le cose appropriate" per farlo funzionare / arrestare tramite systemd o qualsiasi sistema equivalente utilizzato dalla tua distribuzione.