Une variante de la réponse 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.,"
}'
Cela nous permet de faire le bouclage, ce qui présente certains avantages:
- cela fonctionnera jusqu'à la fin de ce processus.
- Il n'appelle pas plus de 1
killall
par occurrence de la chaîne de recherche "BUG: workqueue lockup", ce qui améliore l'autre réponse.
Pour tester: Vous pouvez mettre cela dans un script nommé thescript
, et faire nohup thescript &
, afin que thescript
cela continue même après avoir quitté votre session.
Une fois que vous êtes satisfait, cela fonctionne, tuez-le, puis vous pouvez (au lieu de l'exécuter à chaque fois dans un shell avec nohup
) le transformer en un daemon script
que vous pouvez ensuite avoir démarré dans votre niveau d'exécution actuel.
c'est-à-dire: en utilisant un autre script comme modèle (vous devez avoir au moins les sections start, stop et status), vous pouvez le modifier de thescript
manière appropriée, puis le placer à l'intérieur /etc/rc.d/init.d
, et avoir un lien symbolique vers celui-ci nommé Sxxthescript
sous le (s) approprié (s) /etc/rc.d/rcN
, N
étant un numéro de votre niveau d'exécution normal (voir les premières lignes de who -a
pour connaître le niveau d'exécution actuel). Et disposez également des Kxxthescript
liens symboliques appropriés , dans tous les niveaux d'exécution (ou presque), afin que le script soit correctement supprimé lors du changement de niveau d'exécution.
Ou faites "les choses appropriées" pour le faire fonctionner / arrêter via systemd ou tout système équivalent utilisé par votre distribution.