Shell脚本在失败时不记录Java退出状态

东盟

我正在尝试编写一个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,表示已通过。
我究竟做错了什么?有没有更好的方法来检测应用程序是否无法启动?

谢谢!

福卡钦克

等待!您正在记录的退出状态wait

这就是为什么您在脚本中看到意外结果的原因。查看bash的手册页(bashwait是内置的,因此您需要阅读bash手册):

等待[-n] [n ...]

等待每个指定的子进程并返回其终止状态。每个n可能是一个进程ID ...如果未给出n ,则等待所有当前活动的子进程,并且返回状态为零(!)。如果n指定不存在的进程或作业,则返回状态为127。否则,返回状态为等待的最后一个进程的退出状态。

由于您尚未指定n(要等待的子pid),因此返回状态根据规范为零

另一个问题是:您真的需要一个wait

如果您不需要在后台运行您的应用程序,则只需执行以下操作:

echo "Starting new app"
java -jar $APPFOLDER/$APPNAME*.jar > $LOGFOLDER/$APPNAME"_$(date+%Y.%m.%d.%s).log"
STATUS=$?

唯一的区别是我删除了不必要的内容wait

如果由于某种原因您需要在后台运行应用程序并稍后读取退出状态,则需要等待该pid。要找出最后一个后台进程的pid,请使用特殊变量$!

echo "Starting new app"
java -jar $APPFOLDER/$APPNAME*.jar > $LOGFOLDER/$APPNAME"_$(date+%Y.%m.%d.%s).log" &
CHILDPID=$!
wait "${CHILDPID}"
STATUS=$?

这是它如何工作的简短示例:

user@s:~$ (sleep 10 && exit 42)&
[1] 27792
user@s:~$ wait "$!"
[1]+  Exit 42                 ( sleep 10 && exit 42 )
user@s:~$ echo $?
42

我想知道的是,应用程序在启动时是否失败。在前者的情况下,我的脚本会将应用程序打包,并在前一版本中扮演角色。这个目的太含糊了。您是否只对缺少依赖项感兴趣?

我认为没有简单的方法可以区分JRE非零退出代码和Java应用程序非零退出代码。

我可以想象有很多其他原因可以展开部署,其中许多原因不会导致退出代码为非零。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Shell脚本在失败时不记录Java退出状态

来自分类Dev

进程检查失败时退出Shell脚本

来自分类Dev

如何在失败时退出多行 shell 脚本,并将错误流记录到文件中?

来自分类Dev

当SQL查询失败时,Shell脚本循环结束文件以退出

来自分类Dev

当其中的任何命令失败时,如何使 shell 脚本退出?

来自分类Dev

记录ssh shell的输出并保留退出状态

来自分类Dev

从shell脚本中的函数捕获退出状态

来自分类Dev

如何设置shell脚本的退出状态?

来自分类Dev

Bash Shell脚本:虽然apt-get update失败,但退出状态为0,利用退出状态编写自动更新脚本

来自分类Dev

运行easy_install PIL时,出现错误:安装脚本退出,错误:命令'cc'失败,退出状态为1

来自分类Dev

运行easy_install PIL时,出现错误:安装脚本退出,错误:命令'cc'失败,退出状态为1

来自分类Dev

Bash脚本在命令失败时退出(sshpass)

来自分类Dev

在Shell脚本中实施时,历史记录替换失败

来自分类Dev

子脚本之一失败时不退出bash脚本

来自分类Dev

使用“保留”代码获取shell脚本的退出状态

来自分类Dev

使用“保留”代码获取shell脚本的退出状态

来自分类Dev

如何避免Shell脚本因特定命令失败而退出

来自分类Dev

安装脚本退出并显示错误:安装PyNaCl时,命令'x86_64-linux-gnu-gcc'失败,退出状态为1

来自分类Dev

在Java中启动Shell脚本并在退出时销毁所有进程

来自分类Dev

如何在Shell脚本中获取Java应用程序的退出状态,标准输出和标准错误流?

来自分类Dev

退出不终止脚本

来自分类Dev

退出shell脚本

来自分类Dev

不退出 shell 脚本

来自分类Dev

系统服务由于代码=退出,状态= 1 /失败而保持不活动状态

来自分类Dev

运行python脚本运行shell文件时退出代码191

来自分类Dev

我如何防止脚本在shell退出时终止?

来自分类Dev

失败,退出状态为69

来自分类Dev

如何在最小测试失败时记录状态?

来自分类Dev

Chocolatey能否以安装/脚本的退出状态退出?

Related 相关文章

  1. 1

    Shell脚本在失败时不记录Java退出状态

  2. 2

    进程检查失败时退出Shell脚本

  3. 3

    如何在失败时退出多行 shell 脚本,并将错误流记录到文件中?

  4. 4

    当SQL查询失败时,Shell脚本循环结束文件以退出

  5. 5

    当其中的任何命令失败时,如何使 shell 脚本退出?

  6. 6

    记录ssh shell的输出并保留退出状态

  7. 7

    从shell脚本中的函数捕获退出状态

  8. 8

    如何设置shell脚本的退出状态?

  9. 9

    Bash Shell脚本:虽然apt-get update失败,但退出状态为0,利用退出状态编写自动更新脚本

  10. 10

    运行easy_install PIL时,出现错误:安装脚本退出,错误:命令'cc'失败,退出状态为1

  11. 11

    运行easy_install PIL时,出现错误:安装脚本退出,错误:命令'cc'失败,退出状态为1

  12. 12

    Bash脚本在命令失败时退出(sshpass)

  13. 13

    在Shell脚本中实施时,历史记录替换失败

  14. 14

    子脚本之一失败时不退出bash脚本

  15. 15

    使用“保留”代码获取shell脚本的退出状态

  16. 16

    使用“保留”代码获取shell脚本的退出状态

  17. 17

    如何避免Shell脚本因特定命令失败而退出

  18. 18

    安装脚本退出并显示错误:安装PyNaCl时,命令'x86_64-linux-gnu-gcc'失败,退出状态为1

  19. 19

    在Java中启动Shell脚本并在退出时销毁所有进程

  20. 20

    如何在Shell脚本中获取Java应用程序的退出状态,标准输出和标准错误流?

  21. 21

    退出不终止脚本

  22. 22

    退出shell脚本

  23. 23

    不退出 shell 脚本

  24. 24

    系统服务由于代码=退出,状态= 1 /失败而保持不活动状态

  25. 25

    运行python脚本运行shell文件时退出代码191

  26. 26

    我如何防止脚本在shell退出时终止?

  27. 27

    失败,退出状态为69

  28. 28

    如何在最小测试失败时记录状态?

  29. 29

    Chocolatey能否以安装/脚本的退出状态退出?

热门标签

归档