Script que reinicializará o PC na temperatura da GPU específica

2

Recentemente, comecei a minerar litecoins. Meu minerador consiste em 3 GPUs Radeon R9 290x. De tempos em tempos, um deles (não um específico, acontece aleatoriamente) para a mineração. Geralmente reiniciar o cgminer (programa de mineração) não ajuda, a única coisa que ajuda é a reinicialização. Na semana que vem vou embora por 8 dias e não tenho ninguém para fazer isso para mim, então pensei em um script que faria isso automaticamente.

O script teria que verificar periodicamente se todas as GPUs estão funcionando e, se não, reinicie. Eu acho que a leitura de temperatura é a coisa mais fácil para determinar se todas as cartas estão funcionando. Eu sei ler temperatura, reiniciar, adicionar coisas ao cron. O que eu não sei é como juntar tudo.

Obter comando de temperatura:

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

A saída é assim:

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

Eu gostaria que o script lesse o valor numérico e reinicie se ele ficar abaixo de XX.

Você pode me ajudar?

    
por JazzGott 04.01.2014 / 22:09

2 respostas

3

Salve este script e torne-o executável ( chmod +x scriptname.sh ) e execute-o com bash usando sudo , pois reboot requer raiz.

#! /bin/bash
while :
do
    temp=$(aticonfig --odgt --adapter=all | grep Sensor: | sed 's/[a-zA-Z:-]//g'|  tr -d ' ')

    action=$(echo $temp|awk '{ print ( < 76) ? "reboot" : "" }')

    $action
    sleep 1
done

Eu não testei com o comando da ATI, pois não tenho acesso ao comando, mas ele funciona substituindo aticonfig --odgt --adapter=all | grep Sensor: por echo 'Sensor: Temperature - 77.00 C' . Foi assim que eu testei.

O 76 é o temp de reinicialização. Você pode editar isso.

    
por Julian Stirling 04.01.2014 / 23:17
-2

Isso deve funcionar:

#!/usr/bin/env bash    
while true; do
  aticonfig --odgt --adapter=all | 
   awk -vt="" '(/Sensor:/ && $(NF-1) < t ){exit(1)}' || reboot 
   sleep 10 
done

Salve o script acima como gpu_temp.sh , torne-o executável e execute-o com o limite de temperatura desejado como argumento:

/path/to/gpu_temp.sh 77

Eu não tenho uma placa ati, então não posso testar isso, mas isso deve fazer com que a sua máquina seja reinicializada se o núcleo da GPU cair abaixo de 77 ° C.

Explicação

  • O while true inicia um loop infinito, o script será executado até ser eliminado.
  • A linha awk verifica se o campo próximo ao último ( ($NF-1) ) das linhas que contêm Sensor: é menor do que o que você escolheu e, em caso afirmativo, sai com status de saída 1 .
  • O comando à direita de || será executado se o comando à esquerda falhar, se ele sair com status diferente de zero. Portanto, se um deles estiver abaixo de uma determinada temperatura, o script awk falhará e o sistema será reinicializado.
  • sleep 10 apenas pausa o script por 10 segundos para que você não sobrecarregue seu sistema com solicitações.
por terdon 05.01.2014 / 03:26