Führen Sie den Befehl aus, wenn die Temperatur den Schwellenwert überschreitet, ohne Daemon

Führen Sie den Befehl aus, wenn die Temperatur den Schwellenwert überschreitet, ohne Daemon

Ich muss einen bestimmten Befehl ausführen, wenn mein Laptop zu heiß wird (z. B. ein STOP-Signal an Firefox oder Virtualbox senden, um zu verhindern, dass mein Laptop plötzlich herunterfährt und meine Festplatten beschädigt werden).

Ich kann problemlos ein Programm schreiben, das endlos läuft und dabei regelmäßig die Temperatur überprüft.DasDie Antwort auf die Frage verwendet diesen Ansatz.

Ich möchte jedoch vermeiden, einen eigenen Daemon auszuführen und mein Programm stattdessen an einen vorhandenen anzuhängen. Beispielsweise kann ich in meinem Syslog Folgendes sehen:

5. Mai 02:52:27 myhostname kernel: [ 9141.022262] intel ips 0000:00:1f.6: MCP-Limit überschritten: Durchschnittliche Temperatur 9276, Limit 9000

In meiner Maschine gibt es also bereits Code, der die Temperatur prüft und je nach Bedingung eine Aktion auslöst (z. B. Warnmeldung protokollieren, wenn die Temperatur 9000 überschreitet). Ein weiteres Beispiel ist, dass der Lüfter basierend auf der gleichen Temperatur schneller wird.

Wie kann ich mein Programm an diesen bestehenden Code auf meiner Maschine anhängen? Werden die Änderung der Lüftergeschwindigkeit und die Warnmeldung zur Kerneltemperatur vom selben Code ausgelöst? Wie kann ich das herausfinden?

Antwort1

Sie müssen eine Art Daemon ausführen, der auf derartige Dinge achtet. Hardwaresensoren sind lediglich inaktive Datenquellen und können normalerweise keine eigenständigen Aktionen ausführen.

Wenn Sie nur benutzerdefinierten Code schreiben möchten, können Sie die Installation voncollectd-sensorsPaket(Ihre Distribution nennt es vielleicht anders), das einen Temperaturverlauf speichert. Nachdem Sie collectddie Temperaturdaten konfiguriert haben, sollten Sie in der Lage sein,Richten Sie eine Collectd-Benachrichtigung einfür diese Art von Veranstaltung.

Antwort2

Wie kann ich mein Programm an diesen Code anhängen?

Diese spezielle Ausgabe stammt vom Kernel, alsokönntein der Lage sein, hierfür ein Kernelmodul zu schreiben oder, wenn die Informationen nicht global zugänglich sind, einen Patch für ein vorhandenes.

WRT-Daemons, die Sie bereits laufen haben, könnten Sie nutzencronund überprüfen Sie dies etwa jede Minute.

Wenn Sie eine Granularität wünschen, die feiner als Minuten ist, müssen Sie entweder Ihre eigene Schleife schreiben oder ein Tool finden, das dies bereits kann – einige GUI-Systemmonitore ermöglichen Ihnen möglicherweise die Konfiguration von Alarmen, die einen beliebigen Prozess ausführen können (mir ist aufgefallen, gkrellmdass dies nicht der Fall ist, und es ist schwer, dies durch bloßes Googeln herauszufinden conky).

Antwort3

Es scheint, als ob ein DBUS- oder ACPI-Ereignis ein Ort wäre, an dem man diese „Ereignisse“ einfangen und einen Befehl auslösen kann, um das Gewünschte zu tun. Ich zeige eine Methode dafür, dbus-monitordie angepasst werden könnte, um diese Ereignisse „abzufangen“ und dann Ihr Skript auszuführen.

Sehen Sie sich meine Antwort auf dieses U&L-Q&A mit dem Titel an:Kann libnotify zum Ausführen eines Skripts verwendet werden?

Antwort4

Dies erfordert, dass Sie bereit sind, den Auslöser für Ihren Firefox/Ihre Virtualbox auf dieselbe Temperatur einzustellen, die die Meldung in Ihren Protokollen auslöst, und dass Sie auch bereit sind, syslog-ng auszuführen.

syslog-ng kann so konfiguriert werden, dass beliebiger Code ausgeführt wird, der durch eine an das Protokoll gesendete Nachricht von einem bestimmten Programm oder mit bestimmten Inhalten ausgelöst wird.

In Ihrer syslog-ng.conf würden Sie ein neues Ziel hinzufügen:

destination d_high_temp { program("/path/to/OPs/temperature_script"); };

und auch ein neuer Filter dazu

filter f_high_temp { match("MCP limit exceeded" value("MESSAGE")); };

und zuletzt

log { source(src); filter(f_high_temp); destination(d_high_temp); };

Sie führen nicht mehr Daemons aus als zuvor, können aber weiterhin beliebige Programme beenden.

verwandte Informationen