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
killall
per 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 thescript
continui 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 script
che 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 thescript
appropriato e quindi inserirlo all'interno /etc/rc.d/init.d
e disporre di un collegamento simbolico ad esso denominato Sxxthescript
sotto gli appropriati /etc/rc.d/rcN
, N
essendo un numero per il tuo runlevel normale (vedi le prime righe who -a
per conoscere l'attuale livello di run). E anche i Kxxthescript
collegamenti 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.