我正在运行Java独立作业作为cronjobs。我注意到在极少数情况下,作业将因运行时异常(如OutOfMemoryError)而失败。 cron的MAIL_TO处理程序似乎没有发现作业失败,显然Java应用程序无法执行任何操作,因为执行因内存错误而停止。
处理此类错误并获得cron警报的最佳做法是什么?我能想到的最接近的是每个Java作业写一个" SUCCESS" -log记录,然后在cronjob中链接一个grep并返回一个错误代码,这样cron的MAIL_TO就会把它拿起来。这显然会使crontabs混乱,显然需要更改代码才能写入日志条目。
答案 0 :(得分:1)
JVM(以及与之关联的进程)退出时退出代码1,当未捕获的异常一直到达不处理它的主线程时。
因此,一个选项是在main()
中捕获所有已检查的例外情况,然后使用System.exit()
退出1以外的任何其他内容(不要退出0,因为这是&# 34;标准"成功),并让cron脚本处理任何退出代码(例如使用$?
变量)。
另外,请不要忘记默认情况下堆栈跟踪会转到stderr。
答案 1 :(得分:0)
为什么不使用try catch块来捕获内存不足异常并在catch块中执行必要的操作..你可以创建失败日志记录并在到达catch时在日志中添加作业块
答案 2 :(得分:0)
我认为最好是在数据库或日志中存储成功的完成标志然后根据计数我的意思是cron应该在一天或一周运行多少时间日志或数据库可以查看以查看任何故障。