Uma variante da resposta de @ 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.,"
}'
Isso vamos fazer o looping, que tem algumas vantagens:
- funcionará até que o processo morra.
- Ele também não chama mais de 1
killall
por ocorrência da cadeia de pesquisa "BUG: travamento da fila de trabalho", que melhora a outra resposta.
Para testar: você pode colocar isso em um script chamado thescript
e fazer nohup thescript &
, de modo que thescript
continue sendo executado mesmo depois de sair da sessão.
Quando estiver satisfeito, isso funciona, mate-o e, em vez disso, você pode (em vez de executá-lo em um shell com nohup
) transformá-lo em daemon script
que pode ser iniciado em seu nível de execução atual.
ie: usando outro script como modelo (você precisa ter pelo menos as seções de início, parada e status), você pode modificar thescript
apropriadamente e então colocá-lo dentro de /etc/rc.d/init.d
, e ter um link simbólico para ele chamado Sxxthescript
sob o (s) apropriado (s) /etc/rc.d/rcN
, N
sendo um número para seu nível de execução normal (consulte as linhas superiores de who -a
para saber o nível de execução atual). E também tenha os links simbólicos Kxxthescript
apropriados, em todos (ou quase todos) níveis de execução, para que o script seja apropriadamente eliminado ao alternar os níveis de execução.
Ou faça "as coisas apropriadas" para que ele seja executado / interrompido via systemd ou qualquer sistema equivalente que sua distribuição use.