最近我开始挖掘莱特币。我的矿机由 3 个 Radeon R9 290x GPU 组成。有时其中一个(不是特定的一个,是随机发生的)会停止挖掘。通常重新启动 cgminer(挖掘程序)没有帮助,唯一有帮助的就是重新启动。下周我要离开 8 天,没有人可以帮我做这件事,所以我想到了一个可以自动完成这件事的脚本。
该脚本必须定期验证所有 GPU 是否正常工作,如果不工作,则重新启动。我认为读取温度是确定所有卡是否正常工作的最简单的方法。我知道如何读取温度、重新启动、将内容添加到 cron。我不知道的是如何将它们组合在一起。
获取温度命令:
aticonfig --odgt --adapter=all | grep Sensor:
输出如下所示:
Sensor: Temperature - 77.00 C
Sensor: Temperature - 77.00 C
Sensor: Temperature - 77.00 C
我希望脚本读取数值,并在其低于 XX 时重新启动。
你能帮助我吗?
答案1
将其保存为脚本并使其可执行( ),然后使用需要root 权限的chmod +x scriptname.sh
bash 运行它。sudo
reboot
#! /bin/bash
while :
do
temp=$(aticonfig --odgt --adapter=all | grep Sensor: | sed 's/[a-zA-Z:-]//g'| tr -d ' ')
action=$(echo $temp|awk '{ print ($1 < 76) ? "reboot" : "" }')
$action
sleep 1
done
我没有用 ATI 命令测试过它,因为我无法访问该命令,但它可以用 替换aticonfig --odgt --adapter=all | grep Sensor:
。echo 'Sensor: Temperature - 77.00 C'
这是我测试它的方法。
76 是重启温度。您可以编辑它。
答案2
这应该有效:
#!/usr/bin/env bash
while true; do
aticonfig --odgt --adapter=all |
awk -vt="$1" '(/Sensor:/ && $(NF-1) < t ){exit(1)}' || reboot
sleep 10
done
将上面的脚本保存为gpu_temp.sh
,使其可执行,并使用您想要的温度限制作为参数运行它:
/path/to/gpu_temp.sh 77
我没有 ATI 卡,所以我无法测试这个,但如果 GPU 核心温度低于 77°C,这会导致你的机器重新启动。
解释
- 开始
while true
无限循环,脚本将一直运行直到被终止。 - 该行检查包含的行的
awk
倒数第二个字段()是否小于您选择的值,如果是,则以退出状态退出。($NF-1)
Sensor:
1
||
如果左侧命令失败,并且退出时状态为非零,则将执行右侧命令。因此,如果其中一个核心的温度低于某个值,awk
则脚本将失败,系统将重新启动。sleep 10
只需暂停脚本 10 秒钟,这样您的系统就不会被大量请求淹没。