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.