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
killallpar 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 thescriptcela 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 scriptque 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 thescriptmanière appropriée, puis le placer à l'intérieur /etc/rc.d/init.d, et avoir un lien symbolique vers celui-ci nommé Sxxthescriptsous 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 -apour connaître le niveau d'exécution actuel). Et disposez également des Kxxthescriptliens 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.