Redireciona STDERR e STDOUT para arquivar com timestamp em cada linha

1

No meu CentOS eu estou tentando executar um script php que contém um loop infinito para fazer algumas coisas extravagantes dentro. Não importa que um loop infinito possa não ser uma solução precisa para a maioria dos casos, mas sim para o meu testcase. Se ocorrer um erro dentro desse loop, o erro será gravado em um arquivo de saída (como é tudo a partir do stdout). Isso é o que eu faço no momento.

exec php testfile.php >> output.log 2>&1

Isso funciona como esperado, mas eu quero saber quando stdout ou stderr está escrevendo algo no arquivo, então eu preciso de algum tipo de timestamp em cada linha.

Eu já tentei algo como this , mas se eu fizer como mencionado lá, simplesmente não há saída alguma (eu suspeito que seja por causa de não ser um simples shell script).

É possível redirecionar todos os echo de testfile.php e cada erro de stderr para output.log com um timestamp em cada linha?

    
por Dolgsthrasir 17.03.2016 / 14:33

1 resposta

2

Você pode prefixar cada linha com uma string de data e hora formatada usando o gnu awk. No entanto, o armazenamento em buffer pode fazer com que algumas linhas sejam reordenadas ou os últimos pares desapareçam. Para evitar isso, é recomendável usar stdbuf .

stdbuf -i0 -o0 php testfile.php  2>&1 | gawk '{print strftime("%Y%m%d-%H%M%S"), $0}' >> output.log 
    
por 17.03.2016 / 15:38