Eine Variante der Antwort von @ 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.,"
}'
Dies ist die Schleife, die einige Vorteile hat:
- es wird funktionieren, bis dieser Prozess stirbt.
- Es wird auch nicht mehr als 1
killallpro Auftreten des Suchstrings "BUG: Workqueue Lockup" aufgerufen, was die andere Antwort verbessert.
So testen Sie: Sie können dies in ein Skript mit dem Namen " thescriptand" einfügen nohup thescript &, damit thescriptes auch nach dem Beenden der Sitzung weiter ausgeführt wird.
Sobald Sie zufrieden sind, funktioniert es, töten Sie es und dann können Sie es (anstatt es jedes Mal in einer Shell mit auszuführen nohup) in ein verwandeln, daemon scriptdas Sie dann in Ihrem aktuellen Runlevel gestartet haben können.
dh: unter Verwendung eines anderen Skript als Modell (Sie müssen mindestens die Start-, Stop- und Statusabschnitte haben), können Sie ändern , in thescriptgeeigneter Weise und legen Sie es dann innerhalb /etc/rc.d/init.dund haben einen Symlink zu ihm benannt Sxxthescriptunter der entsprechenden (n) /etc/rc.d/rcN, Nwobei ein Nummer für Ihren normalen Runlevel (siehe die oberen Zeilen von who -a, um den aktuellen Runlevel zu erfahren). Und haben Sie auch die entsprechenden KxxthescriptSymlinks in jedem (oder fast jedem) Runlevel, so dass das Skript beim Wechseln des Runlevels angemessen beendet wird.
Oder tun Sie "die entsprechenden Dinge", damit es über systemd oder ein gleichwertiges System, das Ihre Distribution verwendet, ausgeführt / gestoppt wird.