Я использую Ubuntu 11 и у меня есть некоторые проблемы с grep.
У меня есть сценарий оболочки (см. Ниже), который по существу проверяет, запущена ли определенная моя программа на Java, если нет, то она ее запускает. Эта часть работает отлично!
Если мое Java-приложение выдает какое-либо исключение, я бы хотел получить эту информацию и отправить ее себе по электронной почте. Как я могу проверить, не происходит ли вызов java -jar /bin/MyApp.jar
? Я попытался передать его в grep, но это не сработало.
Ниже приведен полный сценарий, который я написал:
#Check if MyApp.jar is running, if not run it.
if [ $(ps aux | grep 'java' | grep -v grep | wc -l | tr -s "\n") -eq 0 ]
then
echo "PacketCapture Starting...\n"
java -jar /bin/MyApp.jar
echo "PacketCapture Started.\n"
else
echo "PacketCapture already running.\n"
fi
Вы должны перенаправить вывод потока stderror
в поток stdout
, так как исключения регистрируются в потоке stderr
. Приведенный ниже фрагмент может фильтровать строку исключений и печатать до 10 следующих строк.
$ java -jar /bin/MyApp.jar 2>&1 | grep "^Exception" -A10
Примечание. Вы можете использовать команду jps
, чтобы найти процесс Java для Sun JVM. Вы также можете попробовать команды pidof
или pgrep
или grep '[j]ava'
(эта команда также не перечисляет процесс (grep)).