Назад | Перейти на главную страницу

Перенаправление ошибок программы как в журнал, так и в файл ошибок

У меня есть отдельная программа 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, который будет выводиться в STDOUT (3>&1)
  • Перенаправить STDERR в STDOUT (2>&1)
  • Вывести STDOUT в файл журнала (1>MyJavaStandalone.log)
  • tee принимает STDOUT предыдущей команды, которая на самом деле является STDERR вашего Java-приложения, добавляет вывод в файл журнала (так что файл журнала теперь имеет оба потока) и дублирует поток в STDOUT
  • Наконец, этот STDOUT просто перенаправляется в ваш журнал ошибок.