Algunos problemas:
- Está ejecutando esto en un bucle ocupado, lo que consumirá tantos recursos como sea posible. Esta es una instancia donde
sleep
posiblemente podría estar justificado. -
Sin embargo, las versiones recientes de
dmesg
tener un indicador para seguir la salida, por lo que podría reescribir todo como (no probado)while true do dmesg --follow | tail --follow --lines=0 | grep --quiet 'BUG: workqueue lockup' killall someprocessname done
- El código debe estar sangrado para que sea legible.
- Es realmente extraño, pero
[
es lo mismo quetest
- verhelp [
.
Una variante de la respuesta 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.,"
}'
Esto vamos a hacer el bucle, lo que tiene algunas ventajas:
- funcionará hasta que ese proceso muera.
- Tampoco llame a más de 1
killall
por aparición de la cadena de búsqueda "ERROR:bloqueo de la cola de trabajo", que mejora la otra respuesta.
Para probar:puede poner esto en un script llamado thescript
y haz nohup thescript &
, de modo que thescript
seguirá ejecutándose incluso después de salir de la sesión.
Una vez que esté satisfecho de que funciona, elimínelo y podrá hacerlo (en lugar de ejecutarlo cada vez en un shell con nohup
) transformarlo en un daemon script
que luego puede haber comenzado en su nivel de ejecución actual.
es decir:usando otro script como modelo (debe tener al menos las secciones de inicio, parada y estado), puede modificar thescript
apropiadamente y luego colóquelo dentro de /etc/rc.d/init.d
, y tenga un enlace simbólico llamado Sxxthescript
bajo los correspondientes /etc/rc.d/rcN
, N
siendo un número para su nivel de ejecución normal (vea las líneas superiores de who -a
para conocer el nivel de ejecución actual). Y tener el Kxxthescript
apropiado enlaces simbólicos también, en todos (o casi todos) los niveles de ejecución, de modo que el script se elimine adecuadamente al cambiar de nivel de ejecución.
O haga "las cosas apropiadas" para que se ejecute/detenga a través de systemd o cualquier sistema equivalente que use su distribución.