如何判断Linux服务器上的Java程序是否失败?

时间:2011-11-21 09:53:45

标签: java linux tracking

我昨晚在基于Linux的服务器上用Java编写了一个大的隔夜批处理程序。我似乎无法在我的错误日志中找到任何表明我的Java应用程序中遇到错误的内容。

在Linux中是否有办法查看程序是否意外退出?

该程序是许多程序中的一个,它可以在chronjob / tab中运行一夜之间并运行其自己的main方法。它捕获了一系列异常,它们将消息打印到System.err.println,如果被命中,则以状态1退出。

注意:我总是在我的代码中使用Logger,不幸的是我正在处理其他人编写的遗留代码。

5 个答案:

答案 0 :(得分:2)

如果Java崩溃,默认情况下应用程序的工作目录中会有一个hs_err_pid????.log文件。 (这不太可能是这种情况)

如果应用程序在退出之前记录了错误,您需要了解应用程序放置日志的位置并阅读它们(因为它们可以位于系统的任何位置)

答案 1 :(得分:2)

如果用于启动java JVM的工具没有为您记录退出状态,那么没有简单的机制可以发现您所追求的内容。

如果您正在运行auditd(8)服务器以提供审核日志记录,并且您的auditd(8)已配置为记录异常退出并且您的java JVM异常退出 - 基于信号的终止 - - 然后您可以在ANOM_ABEND中查找/var/log/audit/audit.log个事件:

# ausearch -m ANOM_ABEND
/sbin/audispd permissions should be 0750
----
time->Tue Nov  8 18:42:22 2011
type=ANOM_ABEND msg=audit(1320806542.571:264): auid=4294967295 uid=1000 gid=1000 ses=4294967295 pid=11955 comm="regex" sig=11
...

对于将来的执行,您可能希望执行以下操作:

java /path/to/whatever.jar && echo `date` >> /path/to/dir/success || echo `date` >> /path/to/dir/failure

这会将成功或失败的日期回显到日志文件中 - 假设您的应用程序使用标准的Unix风格的exit(0)来取得成功,而其他任何事情都是失败的。

答案 2 :(得分:1)

要检查其终止状态的是虚拟机进程(名为java)。你可以用2个命令编写一个简单的脚本,第一个调用java vm来运行java程序,第二个调用退出状态:echo $?

答案 3 :(得分:1)

如果您确实编写了应用程序,则应使用写入文件的记录器。

请参阅this tutorial如何将Log4j与文件追加器一起使用。在您的代码中,您需要捕获并记录异常。

请参阅this issue

答案 4 :(得分:1)

因为你已经从cron(8)中运行了你的程序,所以程序的标准错误很可能已被捕获并邮寄到某处。

检查crontab(5)以查找运行该程序的用户帐户。 (如果用完/etc/crontab/etc/cron.d/,则在这些文件中。)查找MAILTO变量。如果它不存在,则cron(8)会尝试向crontab(5)所有者发送邮件。如果确实存在,则cron(8)尝试将邮件传递给使用变量指定的任何人。

/var/spool/mail/中查找用户的邮箱,如果服务器似乎没有设置电子邮件设置 - 可能有足够的本地交付。