Вариант ответа @ 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.,"
}'
Это давайте awk сделаем цикл, который имеет некоторые преимущества:
- это будет работать, пока этот процесс не умрет.
- Он также не вызывает более 1 в
killallкаждом случае строки поиска «BUG: блокировка рабочей очереди», что улучшает другой ответ.
Для проверки: Вы можете поместить это в скрипт с именем thescriptи сделать nohup thescript &так, чтобы thescriptон продолжал работать даже после выхода из сеанса.
Как только вы убедитесь, что он работает, убейте его, и затем вы можете (вместо того, чтобы запускать его каждый раз в оболочке с nohup) преобразовать его в тот, daemon scriptкоторый вы могли бы запустить на текущем уровне запуска.
а именно: с помощью другого сценария в качестве модели (вы должны иметь , по крайней мере , секции запуска, остановки и состояния), вы можете изменить thescriptсоответствующим образом, а затем поместить его в пределах /etc/rc.d/init.d, и есть символическая ссылка на него названа в Sxxthescriptрамках соответствующего (ов) /etc/rc.d/rcN, Nбудучи номер вашего нормального уровня выполнения (см. верхние строки, who -aчтобы узнать текущий уровень выполнения). И иметь соответствующие Kxxthescriptсимволические ссылки также на каждом (или почти на каждом) уровне выполнения, чтобы скрипт соответствующим образом уничтожался при переключении уровней выполнения.
Или выполните «соответствующие действия», чтобы запустить или остановить его через systemd или любую другую эквивалентную систему, которую использует ваш дистрибутив.