por que recebo as informações de monitoramento do curl em alguns casos e não em outro caso?

1

Quando executo o seguinte comando em um shell bash interativo:

$ curl ipinfo.io/ip
123.45.67.890

Se eu criar /etc/cron.d/myjob :

24 * * * * tim ( date && curl ipinfo.io/ip && date ) > /tmp/cron.log 2>&1

no /tmp/cron.log, recebo as seguintes informações de monitoramento do curl:

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
^M  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0^M100    14  100    14    0     0    147      0 --:--:-- --:--:-- --:--:--   148
123.45.67.890

Por que eu recebo as informações de monitoramento do curl em alguns casos e não em outro caso? Quais são os dois tipos de casos? Obrigado.

    
por Tim 30.10.2018 / 11:31

1 resposta

4

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
    
por 30.10.2018 / 11:36

Tags