Ejecutar comando cuando la temperatura exceda el umbral, sin demonio

Ejecutar comando cuando la temperatura exceda el umbral, sin demonio

Necesito ejecutar un comando específico si mi computadora portátil se calienta demasiado (por ejemplo, enviar una señal de DETENER a Firefox o Virtualbox para evitar que mi computadora portátil se apague violentamente y dañe mis discos duros).

Puedo escribir fácilmente un programa que se repita indefinidamente mientras controlo periódicamente la temperatura.EsteLa respuesta a la pregunta utiliza este enfoque.

Sin embargo, me gustaría evitar ejecutar mi propio demonio y, en su lugar, adjuntar mi programa a uno existente. Por ejemplo, puedo ver en mi syslog:

5 de mayo 02:52:27 myhostname kernel: [9141.022262] intel ips 0000:00:1f.6: límite de MCP excedido: temperatura promedio 9276, límite 9000

Entonces, ya hay un código en mi máquina que verifica la temperatura, lo que activa alguna acción dependiendo de una condición (por ejemplo, registrar un mensaje de advertencia cuando la temperatura excede los 9000). Otro ejemplo es que el ventilador se acelera en función de la misma temperatura.

¿Cómo puedo adjuntar mi programa a este código existente en mi máquina? ¿El cambio de velocidad del controlador del ventilador y el mensaje de advertencia de temperatura del núcleo se activan desde el mismo código? ¿Cómo puedo saber esto?

Respuesta1

Vas a tener que ejecutar algún tipo de demonio que monitoree ese tipo de cosas. Los sensores de hardware son simplemente fuentes de datos inertes y, por lo general, no pueden realizar acciones por sí solos.

Si solo está buscando salir a escribir código personalizado, puede considerar instalar elcollectd-sensorspaquete(su distribución puede llamarlo de otra manera) que mantendrá un historial de temperaturas. Después de configurar collectdel seguimiento de los datos de temperatura, debería poderconfigurar una notificación recopiladapara ese tipo de evento.

Respuesta2

¿Cómo puedo adjuntar mi programa a este código?

Esa salida en particular es del kernel, por lo quepodríaSer capaz de escribir un módulo del kernel para esto, o si la información no es accesible globalmente, un parche para uno existente.

demonios WRT que ya tienes en ejecución, podrías utilizarloscrony verifique esto aproximadamente cada minuto.

Si desea una granularidad menor que minutos, necesitará escribir su propio bucle o encontrar una herramienta que ya lo haga; algunos monitores de sistema GUI pueden permitirle configurar alarmas que pueden ejecutar un proceso arbitrario (noto que gkrellmsí no, y es difícil saberlo simplemente buscando en Google conky).

Respuesta3

Parece que un evento DBUS o ACPI sería un lugar para aferrarse a estos "eventos" y ejecutar un comando para hacer lo que desee. Muestro un método para hacer esto dbus-monitorque podría adaptarse para "captar" estos eventos y luego ejecutar su script.

Eche un vistazo a mi respuesta a estas preguntas y respuestas de U&L titulada:¿Se puede utilizar libnotify para ejecutar un script?

Respuesta4

Esto requiere que esté dispuesto a que el disparador de su Firefox/Virtualbox tenga la misma temperatura que activa el mensaje en sus registros y que también esté dispuesto a ejecutar syslog-ng.

syslog-ng se puede configurar para ejecutar código arbitrario activado por un mensaje que se envía al registro, desde un programa particular o con contenidos particulares.

En su syslog-ng.conf agregaría un nuevo destino:

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

y también un nuevo filtro para acompañar

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

y por último

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

No ejecutará más demonios de los que ya ejecuta, pero aún podrá cerrar cualquier programa que desee.

información relacionada