我不确定这是否可以直接实现。但我试图使用以下方法获取 CPU 的当前温度:
cpu=$(</sys/class/thermal/thermal_zone0/temp)
我想使用 echo 将同一命令的输出通过管道传输到 if 语句,以便在温度高于 70000 时执行关闭。(命令的输出需要除以 1000 以得到摄氏度温度)。
就像是
cpu=$(</sys/class/thermal/thermal_zone0/temp) | if $cpu -gt 70000 then shutdown fi
我试图这样做是为了防止我的圆周率过热。我将安排一个 cronjob 每 15 分钟检查一次 Pi 的 CPU 温度,如果超过 70 则将其关闭。
谢谢。
答案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
您的命令的问题(除了 - 语句的语法之外if
)是您使用了管道。管道的右侧(您的if
语句)应从管道的左侧(您的变量分配)读取。变量赋值不会产生任何输出,并且您的if
- 语句不会消耗任何输入。此外,$cpu
由于管道的两个部分是同时执行的,因此管道右侧的值是未知的。
对于 cron 作业,以下可能是更好的命令表述:
[ "$(</sys/class/thermal/thermal_zone0/temp)" -le 70000 ] || shutdown
这样可以确保即使温度较低,命令也能成功退出。该变化将从低温测试[ ... -gt 70000 ] && shutdown
中返回非零退出,这会让人认为工作失败。[ ... ]
cron
另请注意,这需要使用 crontabbash
作为 shell 来运行作业,否则$(<...)
语法可能无法正常工作。您可以更改$(<...)
或$(cat ...)
设置SHELL=/bin/bash
在 crontab 的顶部。另外,要运行shutdown
,您可能需要 root 权限。