usando a instrução if diretamente no prompt do bash?

0

Não tenho certeza se isso é possível mesmo diretamente. Mas estou tentando obter a temperatura atual da CPU usando:

cpu=$(</sys/class/thermal/thermal_zone0/temp)

Eu quero canalizar a saída do mesmo comando usando echo para uma instrução if para realizar um desligamento se a temperatura for maior que 70000. (A saída do comando precisa ser dividida por 1000 para a temperatura em graus centígrados). / p>

algo como

cpu=$(</sys/class/thermal/thermal_zone0/temp) | if $cpu -gt 70000 then shutdown fi

Estou tentando fazer isso para impedir que meu pi superaqueça. Vou agendar um cronjob que verifica a cada 15 minutos a temperatura da CPU do meu Pi e desligá-lo se for mais de 70.

Obrigado.

    
por Parth Maniar 29.10.2018 / 18:01

1 resposta

4

Seu último comando está quase correto, mas a sintaxe está errada. Versão corrigida:

cpu=$(</sys/class/thermal/thermal_zone0/temp); if [ "$cpu" -gt 70000 ]; then shutdown; fi

Ou mais curto,

cpu=$(</sys/class/thermal/thermal_zone0/temp); [ "$cpu" -gt 70000 ] && shutdown

Ou mais curto,

[ "$(</sys/class/thermal/thermal_zone0/temp)" -gt 70000 ] && shutdown

O problema com o seu comando (além da sintaxe do if -statement) é que você usa um pipeline. O lado direito de um pipeline (sua instrução if ) deve ser lido do lado esquerdo do pipeline (sua atribuição de variável). Uma atribuição de variável não produz nenhuma saída e sua if -statement não consome nenhuma entrada. Além disso, o valor de $cpu é desconhecido no lado direito do tubo, pois as duas partes do pipeline são executadas simultaneamente.

Para um cron job, o seguinte pode ser uma melhor formulação do comando:

[ "$(</sys/class/thermal/thermal_zone0/temp)" -le 70000 ] || shutdown

Isso garante que o comando saia com sucesso mesmo que a temperatura esteja baixa. A variação [ ... -gt 70000 ] && shutdown retornaria uma saída diferente de zero do teste [ ... ] para baixas temperaturas, o que faria com que cron achasse que a tarefa falhou.

Observe também que isso requer que o crontab esteja usando bash como o shell para executar os trabalhos ou a sintaxe $(<...) pode não funcionar corretamente. Você pode alterar $(<...) para $(cat ...) ou você pode definir SHELL=/bin/bash no topo do crontab. Além disso, para executar shutdown , você provavelmente precisará de privilégios de root.

    
por 29.10.2018 / 18:07