これが直接達成できるかどうかはわかりません。しかし、以下を使用してCPUの現在の温度を取得しようとしています。
cpu=$(</sys/class/thermal/thermal_zone0/temp)
温度が70000以上のときにシャットダウンを実行するには、echoを使用して同じコマンドの出力をifステートメントにパイプしたいと思います。 (温度を摂氏単位で取得するには、コマンド出力を1000で割る必要があります。)
それはまるで
cpu=$(</sys/class/thermal/thermal_zone0/temp) | if $cpu -gt 70000 then shutdown fi
Piが過熱するのを防ぐためにこれをやろうとしています。 PiのCPU温度を15分ごとに確認し、70を超えると終了するようにcronjobを予約します。
ありがとうございます。
ベストアンサー1
最後のコマンドはほぼ正確ですが、文法的には正しくありません。修正バージョン:
cpu=$(</sys/class/thermal/thermal_zone0/temp); if [ "$cpu" -gt 70000 ]; then shutdown; fi
またはより短く、
cpu=$(</sys/class/thermal/thermal_zone0/temp); [ "$cpu" -gt 70000 ] && shutdown
またはより短く、
[ "$(</sys/class/thermal/thermal_zone0/temp)" -gt 70000 ] && shutdown
コマンドの問題(-statement構文に加えてif
)はパイプを使用することです。パイプの右側(if
文)は、パイプの左側(変数割り当て)から読み取る必要があります。変数の割り当ては出力を生成せず、if
ステートメントは入力を消費しません。また、$cpu
パイプラインの2つの部分が同時に実行されるため、パイプラインの右側の値がわかりません。
クローン操作の場合、次の方が良いステートメントかもしれません。
[ "$(</sys/class/thermal/thermal_zone0/temp)" -le 70000 ] || shutdown
これにより、温度が低くてもコマンドは正常に終了します。この変更により、[ ... -gt 70000 ] && shutdown
コールドテストでゼロ以外のシャットダウンが返され、操作が失敗したように見えます。[ ... ]
cron
また、bash
ジョブを実行するには、crontabをシェルとして使用する必要があります。そうしないと、$(<...)
構文が正しく機能しない可能性があります。 crontabの上部で変更$(<...)
または$(cat ...)
設定できます。SHELL=/bin/bash
また、を実行するにはshutdown
root権限が必要な場合があります。