Některé problémy:
- Probíháte v rušné smyčce, která spotřebuje tolik zdrojů, kolik jen může. Toto je jeden případ, kdy
sleepby mohla být oprávněná. -
Nejnovější verze
dmesgmít příznak pro sledování výstupu, takže byste mohli celou věc přepsat jako (netestováno)while true do dmesg --follow | tail --follow --lines=0 | grep --quiet 'BUG: workqueue lockup' killall someprocessname done - Kód by měl být odsazen, aby byl čitelný.
- Je to opravdu zvláštní, ale
[je stejný jakotest- vizhelp [.
Varianta odpovědi @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.,"
}'
Toto pojďme awk udělat smyčkování, které má některé výhody:
- bude fungovat, dokud tento proces neukončí.
- Také nevolá více než 1
killallna výskyt vyhledávacího řetězce „BUG:workqueue lockup“, který vylepšuje druhou odpověď.
Test:Můžete to vložit do skriptu s názvem thescript a proveďte nohup thescript & , takže thescript bude pokračovat i po ukončení relace.
Jakmile budete spokojeni, že to funguje, zabijte ho a pak můžete (místo spouštění pokaždé v shellu s nohup ) převést jej na daemon script které pak můžete spustit ve vaší aktuální úrovni běhu.
tj.:pomocí jiného skriptu jako modelu (musíte mít alespoň sekce start, stop a status), můžete upravit thescript vhodně a poté jej umístěte do /etc/rc.d/init.d a mít na něj symbolický odkaz s názvem Sxxthescript pod příslušným(i) /etc/rc.d/rcN , N je to číslo pro vaši normální úroveň běhu (viz horní řádky who -a znát aktuální úroveň běhu). A mít odpovídající Kxxthescript také symbolické odkazy, v každém (nebo téměř ve všech) úrovních běhu, takže skript je při přepínání úrovní běhu náležitě zabit.
Nebo udělejte „příslušné věci“, abyste jej spustili/zastavili prostřednictvím systemd nebo jiného ekvivalentního systému, který vaše distribuce používá.