Скрипт, который перезагрузит компьютер с определенной температурой графического процессора

Недавно я начал добывать лайткойны. Мой майнер состоит из 3 графических процессоров Radeon R9 290x. Время от времени один из них (не конкретный, это происходит случайно) прекращает майнинг. Обычно перезапуск cgminer (программы майнинга) не помогает, единственное, что помогает, это перезагрузка. На следующей неделе я уезжаю на 8 дней, и мне некому это сделать, поэтому я подумал о сценарии, который сделает это автоматически.

Сценарий должен периодически проверять, все ли графические процессоры работают, а если нет - перезагружаться. Я думаю, что считывание температуры - самая простая вещь, чтобы определить, работают ли все карты. Я умею читать температуру, перезагружаться, добавлять вещи в cron. Чего я не знаю, так это как собрать все воедино.

Команда получения температуры:

 aticonfig --odgt --adapter=all | grep Sensor:

Вывод выглядит следующим образом:

 Sensor: Temperature - 77.00 C
 Sensor: Temperature - 77.00 C
 Sensor: Temperature - 77.00 C

Я бы хотел, чтобы скрипт считал числовое значение и перезагрузился, если он упадет ниже XX.

Можете ли вы помочь мне?

2
задан 5 January 2014 в 01:09

2 ответа

Сохраните этот скрипт, сделайте его исполняемым (chmod +x scriptname.sh) и запустите его с помощью bash, используя sudo, поскольку reboot требуется root.

#! /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 - это темп перезапуска. Вы можете отредактировать это.

0
ответ дан 5 January 2014 в 01:09

Это должно сработать:

#!/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, поэтому я не могу проверить это, но это должно привести к перезагрузке компьютера, если ядро ​​графического процессора упадет ниже 77 ° C.


Объяснение

  • while true запускает бесконечный цикл, сценарий будет работать до тех пор, пока не будет уничтожен.
  • Строка awk проверяет, меньше ли число следующих за последним полем (($NF-1)) строк, содержащих Sensor:, что вы выбрали, и, если это так, выходит со статусом выхода 1.
  • Команда справа от || будет выполнена, если команда слева не удалась, если она вышла с ненулевым статусом. Таким образом, если один, если ядра ниже определенной температуры, сценарий awk не будет выполнен, и система будет перезагружена.
  • sleep 10 просто приостанавливает выполнение сценария на 10 секунд, чтобы вы не заполняли вашу систему запросами.
0
ответ дан 5 January 2014 в 01:09

Другие вопросы по тегам:

Похожие вопросы: