我正在运行 Ubuntu 11,但在使用 grep 时遇到了一些问题。
我有一个 shell 脚本(见下文),它主要检查我的某个 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
答案1
由于异常记录在流中,因此您必须将stderror
流的输出重定向到流。下面的代码片段可以过滤异常 strace 并打印最多 10 行。stdout
stderr
$ java -jar /bin/MyApp.jar 2>&1 | grep "^Exception" -A10
注意:您可以使用jps
命令来查找 sun JVM 的 java 进程。您也可以尝试pidof
或pgrep
命令或grep '[j]ava'
(此命令不会列出其(grep)进程)。