可以使用Java程序的退出代码来检测磁盘空间不足异常吗?
我的Java程序是从windows脚本调用的 是否可以使用Java退出代码来确定Java程序是否由于磁盘空间不足而提前终止,而它仍在从JAR文件加载类文件 我尝试了内存不足异常,它返回退出代码1,但磁盘空间不足返回退出代码0。这是正确的行为吗 子类方法:可以使用Java程序的退出代码来检测磁盘空间不足异常吗?,java,batch-file,Java,Batch File,我的Java程序是从windows脚本调用的 是否可以使用Java退出代码来确定Java程序是否由于磁盘空间不足而提前终止,而它仍在从JAR文件加载类文件 我尝试了内存不足异常,它返回退出代码1,但磁盘空间不足返回退出代码0。这是正确的行为吗 子类方法: public int executeBatch() { logger.info("executeBatch() - Send Email Alert Start"); try { aler
public int executeBatch() {
logger.info("executeBatch() - Send Email Alert Start");
try {
alertTransactionMgr.sendEmailAlert();
} catch (Exception e) {
throw new Exception(e);
}
logger.info("executeBatch() - Send Email Alert End");
return 0;
}
父方法:
public int execute() {
this.trx = createTransaction();
try {
returnCode = executeBatch();
} catch (Exception e) {
printLogErrorMsg("Job Failed caused by the Exception.", e);
returnCode = -1;
trx.setStatus("Failure");
updateBatchTransaction(trx);
}
return returnCode;
}
Windows批处理脚本
@echo off
set ERRLVL=0
java -cp %CLASSPATH% com.test.runner.MainBatchRunner
if not (%ERRORLEVEL%)==() (
set ERRLVL=%ERRORLEVEL%
)
echo Delete Files that are more than 30 old
forfiles /p "%BATCH_LOG_DIR%" /s /m %2*.log /d -%ARCHIVE_DAYS% /c "cmd /c echo del %BATCH_LOG_DIR%\@file"
forfiles /p "%BATCH_LOG_DIR%" /s /m %2*.log /d -%ARCHIVE_DAYS% /c "cmd /c del %BATCH_LOG_DIR%\@file"
echo Program exit %ERRLVL%
echo Program exit %ERRLVL% >> %BATCH_LOG_FILE%
exit /B %ERRLVL%
OutOfMemory的输出:
[信息][2015-06-29 18:05:01960][org.springframework.context.support.ClassPathXmlApplicationContext]-刷新org.springframework.context.support。ClassPathXmlApplicationContext@4b222f:显示名称[org.springframework.context.support]。ClassPathXmlApplicationContext@4b222f]; 启动日期[2015年6月29日星期一18:05:01 SGT];上下文层次结构的根
[INFO][2015-06-29 18:05:02050][org.springframework.beans.factory.xml.XmlBeanDefinitionReader]-从文件[D:\batch\dev\batch\u home\bin\spring\applicationContext test.xml]加载xml bean定义
删除超过30年的文件
del D:\batch\dev\batch\u home\log\“TEST\u 20150629\u 173016.log”
程序出口1
磁盘空间不足时的输出:
[信息][2015-06-29 19:05:01960][org.springframework.context.support.ClassPathXmlApplicationContext]-刷新org.springframework.context.support。ClassPathXmlApplicationContext@4b222f:显示名称[org.springframework.context.support]。ClassPathXmlApplicationContext@4b222f]; 启动日期【2015年6月29日星期一19:05:01 SGT】;上下文层次结构的根
[INFO][2015-06-29 19:05:02050][org.springframework.beans.factory.xml.XmlBeanDefinitionReader]-从文件[D:\batch\dev\batch\u home\bin\spring\applicationContext test.xml]加载xml bean定义
删除超过30年的文件
del D:\batch\dev\batch\u home\log\“TEST1\u 20150629\u 180030.log”
程序退出0您的批处理文件已损坏。ERRORLEVEL永远不会为空,它总是包含一个数字,除非你做了一些愚蠢的事情,比如将它设置为字符串
@echo off
set ERRLVL=0
java -cp %CLASSPATH% com.test.runner.MainBatchRunner
@rem if not (%ERRORLEVEL%)==() (
@rem set ERRLVL=%ERRORLEVEL%
@rem)
if %ERRORLEVEL% != 0 set ERRLVL=%ERRORLEVEL%
echo Delete Files that are more than 30 old
forfiles /p "%BATCH_LOG_DIR%" /s /m %2*.log /d -%ARCHIVE_DAYS% /c "cmd /c echo del %BATCH_LOG_DIR%\@file"
forfiles /p "%BATCH_LOG_DIR%" /s /m %2*.log /d -%ARCHIVE_DAYS% /c "cmd /c del %BATCH_LOG_DIR%\@file"
echo Program exit %ERRLVL%
echo Program exit %ERRLVL% >> %BATCH_LOG_FILE%
exit /B %ERRLVL%
我想知道为什么您的java应用程序会因为磁盘空间满而中断。您提到了JVM的启动,它或多或少是关于将文件读入RAM的。这里涉及的唯一磁盘空间可能是虚拟内存,如果计算机已经大量交换-这将导致OutOfMemoryException,但决不会导致磁盘空间问题 加载应用程序后,它可以检查文件系统根并确定剩余的磁盘空间。如果不够,则可以使用system.exit(int)终止,并为OS或批处理文件提供您选择的有意义的退出代码 0表示应用程序运行正常 1-127表示您定义的任何内容
128-通常是操作系统错误,如“找不到可执行文件”或“权限被拒绝”…请显示代码和输出,说明问题所在;如果程序完全无法加载,则退出代码为0是非常可疑的。另外值得注意的是,从主线程重新抛出的任何异常都会导致JVM以1退出,因此这实际上不是一个有意义的退出代码。
OutOfMemory异常
应返回非零退出代码。OutOfMemory
是否与工作内存无关,而与磁盘空间无关?您好……我遇到的错误是日志文件假脱机的磁盘空间不足。因此,我可以说该程序确实执行了,但由于磁盘空间不足,它失败了,程序以0退出。从批处理/命令行运行程序所获得的“错误级别”由进程退出代码确定-通过System.exit()设置,请参阅:。您应该捕获您关心的任何异常并调用System.exit(n),其中“n”是批处理脚本可以通过%ERRORLEVEL%检查的数字