A diferença é que, no primeiro caso, você está escrevendo para um terminal; a curl
manpage diz de seu medidor de progresso que
curl displays this data to the terminal by default, so if you invoke curl to do an operation and it is about to write data to the terminal, it disables the progress meter as otherwise it would mess up the output mixing progress meter and response data.
Quando o medidor de progresso não está desativado, curl
envia para o erro padrão e os dados baixados para a entrada padrão; no seu cron job, nenhum deles é um terminal, e ambos são redirecionados para /tmp/cron.log
, então você vê ambos no arquivo de log.
Esse comportamento significa que curl
"se comporta bem" em cenários comuns de uso. Se você usa curl
para recuperar dados e enviá-los para o terminal, como no seu primeiro exemplo, tudo o que você vê são os dados. Se você usar curl
para recuperar dados e enviá-los para um arquivo ou um canal, verá informações de progresso no terminal.
Em seu trabalho no cron, você está misturando os dois com seu redirecionamento duplo para /tmp/cron.log
. Se você não quiser ver a saída misturada, desative o medidor de progresso totalmente com a opção -s
ou redirecione o erro padrão para outro arquivo:
24 * * * * tim ( date && curl -s ipinfo.io/ip && date ) > /tmp/cron.log 2>&1
ou
24 * * * * tim ( date && curl ipinfo.io/ip && date ) > /tmp/cron.log 2>/tmp/cron.err