Executar comando quando a temperatura exceder o limite, sem daemon

Executar comando quando a temperatura exceder o limite, sem daemon

Preciso executar um comando específico se meu laptop ficar muito quente (por exemplo, enviar um sinal STOP para o Firefox ou Virtualbox para evitar que meu laptop desligue violentamente e danifique meus discos rígidos).

Posso facilmente escrever um programa que faça um loop indefinidamente enquanto verifica periodicamente a temperatura.Essea resposta da pergunta usa essa abordagem.

No entanto, gostaria de evitar executar meu próprio daemon e, em vez disso, anexar meu programa a um existente. Por exemplo, posso ver no meu syslog:

5 de maio 02:52:27 kernel myhostname: [9141.022262] intel ips 0000:00:1f.6: limite MCP excedido: temperatura média 9276, limite 9000

Portanto, já existe um código em minha máquina verificando a temperatura, que dispara alguma ação dependendo de uma condição (por exemplo, registrar uma mensagem de aviso quando a temperatura excede 9.000). Outro exemplo é que o ventilador acelera com base na mesma temperatura.

Como posso anexar meu programa a este código existente em minha máquina? A mudança de velocidade do driver do ventilador e a mensagem de aviso de temperatura do kernel são disparadas do mesmo código? Como posso descobrir isso?

Responder1

Você terá que executar algum tipo de daemon que monitore esse tipo de coisa. Sensores de hardware são apenas fontes de dados inertes e geralmente não conseguem executar ações por conta própria.

Se você está apenas querendo começar a escrever código personalizado, você pode instalar ocollectd-sensorspacote(sua distro pode chamá-lo de outra coisa), que manterá um histórico de temperaturas. Depois de configurar collectdpara rastrear dados de temperatura, você poderáconfigurar uma notificação de coletapara esse tipo de evento.

Responder2

Como posso anexar meu programa a este código?

Essa saída específica vem do kernel, então vocêpoderser capaz de escrever um módulo de kernel para isso, ou se a informação não estiver acessível globalmente, um patch para um já existente.

Daemons WRT que você já possui em execução, você pode usarcrone verifique isso a cada minuto ou mais.

Se você quiser uma granularidade mais fina que minutos, você precisará escrever seu próprio loop ou encontrar uma ferramenta que já faça isso - alguns monitores de sistema GUI podem permitir que você configure alarmes que podem executar um processo arbitrário (percebo que gkrellmfaz não, e é difícil dizer apenas pesquisando no Google conky).

Responder3

Parece que um evento DBUS ou ACPI seria um lugar para se conectar a esses "eventos" e disparar um comando para fazer o que quiser. Eu mostro um método para fazer isso dbus-monitorque pode ser adaptado para "capturar" esses eventos e então executar seu script.

Dê uma olhada em minha resposta a estas perguntas e respostas sobre U&L intituladas:O libnotify pode ser usado para executar um script?

Responder4

Isso requer que você esteja disposto a fazer com que o gatilho do Firefox/Virtualbox tenha a mesma temperatura que aciona a mensagem em seus logs e também esteja disposto a executar o syslog-ng.

syslog-ng pode ser configurado para executar código arbitrário acionado por uma mensagem enviada ao log, de um programa específico ou com conteúdo específico.

No seu syslog-ng.conf você adicionaria um novo destino:

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

e também um novo filtro para acompanhar

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

e por fim

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

Você não executará mais daemons do que já está, mas ainda poderá desligar quaisquer programas que desejar.

informação relacionada