Cron não anexando ao arquivo corretamente

0

Eu tenho um script (logtemps.sh) que registra a temperatura do meu Raspberry Pi, da seguinte forma

TIME1=$(date +%s)
TEMP1=$(</sys/class/thermal/thermal_zone0/temp)
sleep 1s

TIME2=$(date +%s)
TEMP2=$(</sys/class/thermal/thermal_zone0/temp)
sleep 1s

TIME3=$(date +%s)
TEMP3=$(</sys/class/thermal/thermal_zone0/temp)
sleep 1s

echo "$TIME1,$TEMP1"
echo "$TIME2,$TEMP2"
echo "$TIME3,$TEMP3"

A execução de ./logtemps.sh fornece (por exemplo):

1499618156,55843
1499618157,56382
1499618158,55843

Isto é como planejado.

Eu tenho um cronjob configurado para executar isso a cada minuto e acrescento a saída em um arquivo temps.txt usando */2 * * * * /home/pi/temp-cron/logtemps.sh >> /home/pi/temp-cron/temps.txt 2>&1 .

No entanto, quando olho para temps.txt , aparece

1499618041,
1499618042,
1499618043,
1499618161,
1499618162,
1499618163,

A segunda variável ($ TEMPn) parece ser completamente ignorada.

O cronjob foi instalado com crontab -e , portanto, ele deve ser executado como meu usuário ( pi ), portanto, não vejo onde seria a diferença de não executá-lo sozinho.

    
por Luke Moll 09.07.2017 / 18:51

1 resposta

0

Em logtemps.sh , utilizo $(<file) para ler o conteúdo de file em uma variável. Este é um recurso do bash , no entanto, o cron executa comandos com sh . Para resolver isso, altere a linha em crontab para

*/2 * * * * bash /home/pi/temp-cron/logtemps.sh >> /home/pi/temp-cron/temps.txt 2>&1

(adicionado bash )

ou adicione #!/bin/bash ao topo do script para que ele sempre seja executado sob bash .

Veja benefício 4) da atualização para a versão 8 do Unix, onde o #! foi introduzido.

TLDR; O Cron é executado sob sh , o script usa os comandos bash -only, sempre shebang.

    
por 09.07.2017 / 18:51