Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.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程序在Linux服务器上是否失败?_Java_Linux_Tracking - Fatal编程技术网

如何确定Java程序在Linux服务器上是否失败?

如何确定Java程序在Linux服务器上是否失败?,java,linux,tracking,Java,Linux,Tracking,昨晚我在一台基于Linux的服务器上运行了一个用Java编写的大的一夜之间的批处理程序。我似乎在错误日志中找不到任何提示Java应用程序中遇到错误的内容 在Linux中是否有办法查看程序是否意外退出 该程序是许多通过chronjob/tab在夜间运行并使用自己的主方法的程序之一。它捕获一系列异常,这些异常将消息打印到System.err.println,并在命中这些异常时以状态1退出 注意:我总是在代码中使用记录器。不幸的是,我正在处理其他人编写的遗留代码。如果Java崩溃,默认情况下,应用程序

昨晚我在一台基于Linux的服务器上运行了一个用Java编写的大的一夜之间的批处理程序。我似乎在错误日志中找不到任何提示Java应用程序中遇到错误的内容

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

该程序是许多通过chronjob/tab在夜间运行并使用自己的主方法的程序之一。它捕获一系列异常,这些异常将消息打印到System.err.println,并在命中这些异常时以状态1退出


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

如果Java崩溃,默认情况下,应用程序的工作目录中将有一个
hs\u err\u pid???。log
文件。(情况不太可能如此)


如果应用程序在退出之前记录了一个错误,那么您需要了解应用程序将其日志放在哪里,并读取这些日志(因为它们可以在系统上的任何位置)

如果Java崩溃,默认情况下,应用程序的工作目录中将有一个
hs\u err\u pid???.log
文件。(情况不太可能如此)


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

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

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

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

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


请参阅。

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

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


请参阅。

如果用于启动
java
JVM的任何工具都没有为您记录退出状态,那么就没有简单的机制来发现您想要的是什么

如果您正在运行
auditd(8)
服务器以提供审核日志记录,并且您的
auditd(8)
配置为记录异常退出,并且您的
java
JVM异常退出——基于信号的终止——那么您可以在
/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样式
退出(0)
来表示成功,而使用任何其他样式来表示失败。

没有简单的机制来发现您的目标,如果您用来启动
java
JVM的任何工具都没有为您记录退出状态

如果您正在运行
auditd(8)
服务器以提供审核日志记录,并且您的
auditd(8)
配置为记录异常退出,并且您的
java
JVM异常退出——基于信号的终止——那么您可以在
/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样式的退出(0)来表示成功,而使用其他样式的退出(0)来表示失败。

因为您的程序已经用完了
cron(8)
,很有可能程序的标准错误实际上已经被捕获并邮寄到某个地方

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


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

因为您的程序已用完
cron(8)
,很有可能程序的标准错误实际上已经被捕获并邮寄到某个地方

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


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

是否使用crontab启动作业?是的,更新确实从chronjob/chrontab运行,它每晚都在运行,昨晚似乎由于某种原因失败了,即突然退出。批处理作业本身用于同步两个大型表,以确保备份白天的任何数据更改,而且数据似乎尚未同步,这是我知道它失败的原因。您是否使用crontab启动作业?是的,更新确实从chronjob/chrontab运行,它每晚都在运行,似乎昨晚出于某种原因