Experimente:
/usr/java/jdk1.6.0/bin/java MyJavaStandalone 2>&1 >> MyJavaStandalone.log | tee -a MyJavaStandalone.err >> MyJavaStandalone.log &
Eu tenho um programa independente Java programado para ser executado como cron a cada 10 minutos
Eu quero pegar / escrever erros lançados por este programa Java ambos no arquivo de log e também como um arquivo de erro separado (MyJavaStandalone.err).
Eu conheço os seguintes comandos:
Erros redirecionados para um arquivo separado, mas não para o arquivo de log
/usr/java/jdk1.6.0/bin/java MyJavaStandalone >> MyJavaStandalone.log 2>> MyJavaStandalone.err &
O log e os erros são redirecionados para o mesmo arquivo de log, mas os erros sozinhos não são gravados em um arquivo de erro separado
/usr/java/jdk1.6.0/bin/java MyJavaStandalone >> MyJavaStandalone.log 2>&1 &
Você pode conseguir o que você quer assim:
/usr/java/jdk1.6.0/bin/java MyJavaStandalone 3>&1 2>&1 1>MyJavaStandalone.log| tee -a MyJavaStandalone.log > MyJavaStandalone.err
O que faz:
3>&1
) 2>&1
) 1>MyJavaStandalone.log
) tee
pega o STDOUT do comando anterior, que na verdade é STDERR do aplicativo Java, acrescenta a saída ao arquivo de log (portanto, o arquivo de log agora possui os dois fluxos) e duplica o fluxo para STDOUT