У меня есть отдельная программа Java, которая должна запускаться как cron каждые 10 минут.
Я хочу перехватывать / записывать ошибки, создаваемые этой 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 &
Попробуйте:
/usr/java/jdk1.6.0/bin/java MyJavaStandalone 2>&1 >> MyJavaStandalone.log | tee -a MyJavaStandalone.err >> MyJavaStandalone.log &
Вы можете добиться того, чего хотите, вот так:
/usr/java/jdk1.6.0/bin/java MyJavaStandalone 3>&1 2>&1 1>MyJavaStandalone.log| tee -a MyJavaStandalone.log > MyJavaStandalone.err
Что оно делает:
3>&1
)2>&1
)1>MyJavaStandalone.log
)tee
принимает STDOUT предыдущей команды, которая на самом деле является STDERR вашего Java-приложения, добавляет вывод в файл журнала (так что файл журнала теперь имеет оба потока) и дублирует поток в STDOUT