Quelques problèmes :
- Vous exécutez ceci dans une boucle occupée, qui consommera autant de ressources que possible. Il s'agit d'un cas où
sleep
ing pourrait être justifié. -
Cependant, les versions récentes de
dmesg
avoir un indicateur pour suivre la sortie, vous pouvez donc réécrire le tout comme (non testé)while true do dmesg --follow | tail --follow --lines=0 | grep --quiet 'BUG: workqueue lockup' killall someprocessname done
- Le code doit être en retrait pour être lisible.
- C'est vraiment étrange, mais
[
est identique àtest
- voirhelp [
.
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.,"
}'
Ceci permet à awk de faire la boucle, ce qui présente certains avantages :
- cela fonctionnera jusqu'à ce que ce processus meure.
- Il n'appelle pas non plus plus de 1
killall
par occurrence de la chaîne de recherche "BUG :blocage de la file d'attente", qui améliore l'autre réponse.
Pour tester :vous pouvez mettre ceci dans un script nommé thescript
, et faites nohup thescript &
, de sorte que thescript
continuera à fonctionner même après avoir quitté votre session.
Une fois que vous êtes satisfait que 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 alors 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 modifier thescript
de manière appropriée, puis placez-le entre /etc/rc.d/init.d
, et avoir un lien symbolique vers celui-ci nommé Sxxthescript
sous le(s) /etc/rc.d/rcN
approprié(s) , N
étant un nombre pour votre niveau d'exécution normal (voir les premières lignes de who -a
pour connaître le niveau d'exécution actuel). Et avoir le Kxxthescript
approprié des liens symboliques également, dans tous (ou presque tous) les niveaux d'exécution, de sorte que le script soit correctement tué lors du changement de niveau d'exécution.
Ou faites "les choses appropriées" pour qu'il s'exécute/s'arrête via systemd ou tout système équivalent utilisé par votre distribution.