Redirecionar Cron Stderr e Stdout para um arquivo de log com carimbo de data/hora

Redirecionar Cron Stderr e Stdout para um arquivo de log com carimbo de data/hora

Estou tentando fazer com que stdout e stderr cheguem ao meu arquivo de log para um processo cron. Atualmente, o stdout faz isso conforme pretendido, mas o stderr não. Meus carimbos de data/hora estão criando o problema. Se eu remover a tsparte do tubo, stdout e stderr chegarão ao arquivo de log, mas as linhas não terão os carimbos de data e hora legais que eu preciso.

Comando Bash:

node index.js | ts '[%Y-%m-%d %H:%M:%S]' >> $(date --utc +\%Y-\%m-\%d).log 2>&1

Script do nó JS:

console.log('log');
console.error('error');

Qual é a aparência do meu arquivo de log:

[2020-04-15 16:26:10] log

Qual será a aparência do meu arquivo de log: (os carimbos de data e hora devem refletir a hora exata em que cada linha é registrada)

[2020-04-15 16:26:10] log
[2020-04-15 16:26:11] error

Atualmente, o stderr é registrado na linha de comando em vez de colocá-lo no arquivo de log datado, que eu preciso. Eu preciso disso para:

  • anexar ao arquivo de log, não substituir
  • anexar de forma assíncrona para que eu possa tail -fver o registro ao vivo enquanto o script ainda está em execução
  • cada linha deve ter um carimbo de data/hora anexado [%Y-%m-%d %H:%M:%S]no momento real em que a linha é registrada
  • os arquivos de log devem ser nomeados pelo dia atual (mas não é necessário)

Consegui que cada um deles funcionasse com o comando bash acima, com exceção do stderr... tão perto! Alguém sabe como fazer isso funcionar?

Responder1

Obrigadochave de açopelo seu comentário acima. Aqui está a linha bash agora funcionando:

node index.js 2>&1 | ts '[%Y-%m-%d %H:%M:%S]' >> $(date --utc +\%Y-\%m-\%d).log

informação relacionada