Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
可以使用Java程序的退出代码来检测磁盘空间不足异常吗?_Java_Batch File - Fatal编程技术网

可以使用Java程序的退出代码来检测磁盘空间不足异常吗?

可以使用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

我的Java程序是从windows脚本调用的

是否可以使用Java退出代码来确定Java程序是否由于磁盘空间不足而提前终止,而它仍在从JAR文件加载类文件

我尝试了内存不足异常,它返回退出代码1,但磁盘空间不足返回退出代码0。这是正确的行为吗

子类方法:

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%检查的数字