Lmセンサー:温度が限界より高いか低いときに特定のコマンドを実行します。

Lmセンサー:温度が限界より高いか低いときに特定のコマンドを実行します。

換気が非常に悪いコンピュータを使用しており、温度は時々100℃に達します。哀れなのはもう換気できません(」より大きなファンをインストールしてください「これは適切なソリューションではありません。)CPUが100℃に達すると、システムは「激しく」停止します(ただし終了します)。システムはlm-sensors-3を使用してUbuntu 10.10を実行しています(インストールされたパッケージはlm-sensors 1: 3.1.2-6)

どのプログラムが問題を引き起こしているのかを知っている(非常にトリッキーなメディアプレーヤー)、温度が98℃に達すると、大きな中断なしにしばらく停止し、温度に達すると動作するようにすることができます... ...再起動します。たとえば、90℃です。

ルーメンセンサーで直接同様の操作を実行できますか?それとも、ルーメンセンサーを定期的にチェックし、温度に応じて「作業を実行する」独自のプロセスを作成する必要がありますか?

よろしくお願いします。

答え1

出力が何であるかによって異なりますsensors。あなたのものが私と同じなら:

% sensors
k10temp-pci-00c3
Adapter: PCI adapter
temp1:        +44.0°C  (high = +70.0°C)

その後、次のスクリプトを使用してそれに応じて調整できます。TEMP_STOPまた、TEMP_START使用したい行をフィルタリングする正規表現も変更する必要がありますsensors。関数grepのパラメータですtemp

#!/bin/bash

TEMP_STOP=98
TEMP_START=90

temp() {
    sensors | grep '^temp1:' | sed -e 's/.*: \+\([+-][0-9.]\+\)°C.*$/0\1/'
}

while true; do
    TEMP=$(temp)
    # keep waiting until temp is too hot
    while [ $(echo "$TEMP < $TEMP_STOP" | bc) = 1 ]; do
        sleep 10
        TEMP=$(temp)
    done

    echo temp $TEMP too hot, stopping.

    # now wait for it to cool down...
    while [ $(echo "$TEMP > $TEMP_START" | bc) = 1 ]; do
        sleep 10
        TEMP=$(temp)
    done

    echo ok now, restarting...
done

関連情報