Eu não basearia o registro em log na gravação de arquivos com o tee, apenas registrasse no stdout e no seu canal de registro. Eu estou supondo que você pode modificar seus scripts python, tudo abaixo se aplica a essa situação. ( desloque-se para o "usando a resposta tee" :).
Em Python, você pode usar o módulo Logging (verifique o Logging HOWTO na documentação oficial do Python: link ) mas, infelizmente, processos diferentes não podem gravar no mesmo arquivo (diferentes linhas do mesmo processo podem).
Então, neste caso, você está descrevendo, eu acho que o caso base será o log para o syslog, seja com a biblioteca de log, ou com a biblioteca Syslog ( link ).
Você pode logar no recurso local0. * do syslog em todos os aplicativos e deixar que o syslog (rsyslog no meu caso) grave no arquivo:
local0.* /var/log/myapp.log
O melhor deste sistema é que você pode até mesmo fazer login em servidores syslog remotos em máquinas diferentes, não apenas na execução dos aplicativos.
PS: Não se esqueça de definir uma política de /etc/logrotate.d/myapp para girar seus arquivos de registro de aplicativos!
A opção tee
Se você ainda precisa usar tee
, tentou usar o sinal -a
para o segundo e terceiro processo? Conforme declarado no link :
The tee ( 13.9 ) command writes its standard input to a file and writes the same text to its standard output. You might want to collect several commands' output and tee them all to the same file, one after another. The obvious way to do that is with the -a option
$ some-command | tee teefile
$ another-command | tee -a teefile
$ a-third-command | tee -a teefile