我有一个 Java 独立程序,计划每 10 分钟作为 cron 运行一次
我想捕获/写入此 Java 程序抛出的错误两个都在日志文件中,并作为单独的错误文件(MyJavaStandalone.err)。
我知道以下命令:
错误重定向到单独的文件,但不重定向到日志文件
/usr/java/jdk1.6.0/bin/java MyJavaStandalone >> MyJavaStandalone.log 2>> MyJavaStandalone.err &
日志和错误都会重定向到同一个日志文件,但错误不会单独写入单独的错误文件
/usr/java/jdk1.6.0/bin/java MyJavaStandalone >> MyJavaStandalone.log 2>&1 &
答案1
尝试一下:
/usr/java/jdk1.6.0/bin/java MyJavaStandalone 2>&1 >> MyJavaStandalone.log | tee -a MyJavaStandalone.err >> MyJavaStandalone.log &
答案2
你可以通过以下方式实现你想要的:
/usr/java/jdk1.6.0/bin/java MyJavaStandalone 3>&1 2>&1 1>MyJavaStandalone.log| tee -a MyJavaStandalone.log > MyJavaStandalone.err
它能做什么:
- 创建一个新的文件描述符 3,它将输出到 STDOUT (
3>&1
) - 将 STDERR 重定向到 STDOUT (
2>&1
) - 将 STDOUT 输出到日志文件 (
1>MyJavaStandalone.log
) tee
获取上一个命令的 STDOUT(实际上是 Java 应用程序的 STDERR),将输出附加到日志文件(因此日志文件现在有两个流)并将流复制到 STDOUT- 最后,STDOUT 被重定向到你的错误日志