#!/bin/bash
sj_temp_pid="$(cat /var/run/sj_temp.pid 2>/dev/null)"
get_name="$(cat /proc/$sj_temp_pid/comm 2>/dev/null)"
# 这个其实是if else的语法糖 [] 为判断条件 && 内是成功的处理逻辑 ||内是失败的处理逻辑,当然,可以只有&& 即成功的处理逻辑
[ "$get_name" = "${0##*\/}" ]&&{
echo "脚本已经执行,请勿重复执行……"
exit 0
}
# 温度获取地址的获取
[ -r /sys/class/hwmon/hwmon0/temp1_input ]&&tempfile="/sys/class/hwmon/hwmon0/temp1_input"
# 温度获取地址的获取
[ -r /sys/class/thermal/thermal_zone0/temp ]&&tempfile="/sys/class/thermal/thermal_zone0/temp"
# 获取到当前风扇的gpio的引脚定义(两脚的话只有开关,四pin的话会有转速控制)
[ -L /sys/class/gpio/gpiochip501 ]&&gpio_id=504||gpio_id=148
{
#保存当前脚本的pid,用于开头的文件是否运行的检测
echo "$BASHPID" >/var/run/sj_temp.pid
[ "$(cat /sys/class/thermal/cooling_device1/type)" = "gpio-fan" ]&&statusfile="/sys/class/thermal/cooling_device1/cur_state"||{
#获取好风扇状态的文件配置地方
statusfile="/sys/class/gpio/gpio$gpio_id/value"
echo "$gpio_id" >/sys/class/gpio/export
# 设置风扇方向
echo "out" >/sys/class/gpio/gpio$gpio_id/direction
# 设置风扇状态
echo "0" >/sys/class/gpio/gpio$gpio_id/value
}
# 循环执行
while :
do
# 先获取到当前的cpu温度
cpu_temp=$(cat $tempfile)
# 再获取到当前风扇的状态,没有先后顺序哈这俩
f_status=$(cat $statusfile)
# 这个其实是if else的语法糖 [] 为判断条件 && 内是成功的处理逻辑 ||内是失败的处理逻辑,意思为cpu温度超过了60000 就打开风扇,小于50000就关闭风扇,中间的差值防止风扇反复横跳,留个缓冲区。
[ "$cpu_temp" -ge "60000" -a "$f_status" = "0" ]&&echo "1" >$statusfile
[ "$cpu_temp" -lt "50000" -a "$f_status" = "1" ]&&echo "0" >$statusfile
sleep 10
done
} >/dev/null 2>&1 &
版权属于:
jjiaper
作品采用:
《
署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)
》许可协议授权
评论 (0)