Executa o comando quando a temperatura excede o limite, sem daemon

5

Eu preciso executar um comando específico se meu laptop ficar muito quente (por exemplo, enviar um sinal de STOP para o Firefox ou o VirtualBox para impedir que meu laptop seja desligado violentamente e danificar meus discos rígidos).

Eu posso escrever facilmente um programa que faz um loop indefinidamente enquanto verifica periodicamente a temperatura. Esta pergunta é usada essa abordagem.

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

May 5 02:52:27 myhostname kernel: [ 9141.022262] intel ips 0000:00:1f.6: MCP limit exceeded: Avg temp 9276, limit 9000

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

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

    
por user84207 05.05.2014 / 20:20

4 respostas

5

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

Se você quiser apenas escrever código personalizado, pode pesquisar a instalação do collectd-sensors package (sua distro pode chamar de outra coisa), que manterá um histórico de temperaturas. Depois de configurar collectd para rastrear dados de temperatura, você deve conseguir configurar uma notificação de coleta para esse tipo de evento.

    
por 05.05.2014 / 20:48
3

How can I attach my program to this code?

Essa saída em particular é do kernel, então você pode ser capaz de escrever um módulo do kernel para isso, ou se a informação não for globalmente acessível, um patch para um já existente.

Daemons do WRT que você já usa, você pode usar cron e verifique isso a cada minuto ou mais.

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

    
por 05.05.2014 / 20:57
2

Parece que um evento DBUS ou ACPI seria um local para se conectar a esses "eventos" e disparar um comando para fazer o que você deseja. Eu mostro um método para fazer isso usando dbus-monitor , que poderia ser adaptado para "capturar" esses eventos e, em seguida, executar seu script.

Dê uma olhada na minha resposta a esta pergunta e resposta com o título A: A libnotify pode ser usada para executar um script?

    
por 05.05.2014 / 22:20
2

Isso requer que você esteja disposto a ter o gatilho para o seu Firefox / VirtualBox ter a mesma temperatura que aciona a mensagem para seus logs e também está disposto a executar o syslog-ng.

O syslog-ng pode ser configurado para executar código arbitrário acionado por uma mensagem sendo enviada para o log, a partir de um programa em particular ou com conteúdos particulares.

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 estará executando mais daemons do que já é, mas ainda poderá encerrar os programas que desejar.

    
por 06.05.2014 / 01:57