我正在尝试编写一个 shell 脚本,记录 Java 程序的退出状态。该脚本应该简单地启动一个 Java 应用程序,如果 Java 应用程序因某些原因无法运行,shell 脚本应该检测到这一点并采取相应的措施。
以下是我的脚本:
#!/bin/bash
APPNAME="app"
APPFOLDER=$APPNAME
BACKUP=$APPFOLDER"-backup"
LOGFOLDER=$APPNAME"-log"
echo "Starting new app"
java -jar $APPFOLDER/$APPNAME*.jar > $LOGFOLDER/$APPNAME"_$(date+%Y.%m.%d.%s).log"
wait
STATUS=$?
if [ $STATUS -eq 0 ]
then
echo "Deployment successful" $?
else
echo "Deployment failed: ... derp" $?
fi
我写了一个简单的Swing GUI,它可以顺利运行。但是,我将其打包成jar文件时没有指定入口点。因此,我应该会收到以下错误:
Exception in thread "main" java.lang.NoClassDefFoundError: Demo$1
脚本应该检测到应用程序启动失败。
所有这些都很好,直到我尝试使用&在后台启动Java应用程序。每当我这样做时:
java -jar $APPFOLDER/$APPNAME*.jar > $LOGFOLDER/$APPNAME"_$(date+%Y.%m.%d.%s).log" &
脚本总是返回0作为$?,表示它已经通过了。
我做错了什么?有更好的方法来检测应用程序是否启动失败吗?
谢谢!
X
时间来正确启动或死亡,那么你可以在那个时间点之后只检查一次。但是,更可能的情况是,你不知道这一点,那么你就需要一直检查,直到它可能死亡或者你不再关心为止。 - Etan Reisner