Tomcat是否正在运行?


109

有兴趣了解人们通常如何检查Tomcat是否在Unix环境中运行。

我要么检查进程正在使用

ps -ef | grep java
ps -ef | grep logging

或者我检查端口号是否处于活动状态

netstat -a | grep 8080

有没有更好的方法来检查Tomcat是否正在运行?上面的方法似乎是检查Tomcat是否正在运行的一种“ hacky”方式。

Answers:


57

为什么grep ps在将pid写入$CATALINA_PID文件后呢?

我有一个cron'd checker脚本,当tomcat关闭时,该脚本会发送一封电子邮件:

kill -0 `cat $CATALINA_PID` > /dev/null 2>&1
if [ $? -gt 0 ]
then
    echo "Check tomcat" | mailx -s "Tomcat not running" support@dom.com
fi

我想您也可以wget用来检查雄猫的健康状况。如果您有一个带有用户负载等的诊断页面,则可以定期获取该页面并进行解析,以确定是否出了问题。


使用Windows容易吗?我会只修改Windows等效项的命令,将其放入批处理文件中,然后通过调度程序进行调度吗?
liltitus14年

您可以tasklist |find /I "Tomcat" || echo "Tomcat not running"在bat文件中执行某些操作,但是根据进程名称的不同,可能需要查找Java,而不是Tomcat。
GL2014 2014年

1
要从操作系统安装的Tomcat了解$ CATALINA_PID的值,请尝试: ps aewwx | grep CATALINA_PID ,您将在运行过程的输出中找到它,以及其他环境变量。在Debian 8中,该值为:CATALINA_PID = / var / run / tomcat8.pid
Falken教授

2
重要的是要注意pid文件可能不存在,它取决于环境和tomcat的启动方式。请参阅此答案以在启动时创建pid文件。
阿尔贝托·德保罗

92

在我的Linux系统上,我使用startup.sh脚本启动Tomcat。要知道它是否正在运行,我使用

ps -ef | grep tomcat  

如果输出结果包含我的tomcat文件夹的完整路径,则说明它正在运行


68

请尝试此操作,因为它需要root权限,所以请使用sudo

sudo service tomcat7 status

17
如果Tomcat不是服务怎么办?而是一个包。
emeraldhieu

1
@ Emerald214在这种情况下,您会得到tomcat7: unrecognized service
Yar

@Yar,这取决于您的tomcat版本
-tmh

14

netstat -lnp | grep 8080如果您知道Tomcat的监听端口,那可能是最好的方法。如果要确定其功能正常,则必须建立连接并发送HTTP请求并获得响应。您可以以编程方式或使用任何网络浏览器执行此操作。


如果您知道端口,我想这是因为有变化,你如何检查可执行文件运行取决于你如何安装了Tomcat,无论是其服务或没有等最简单的方法
加法尔

9

您可以通过以下方式检查tomcat的状态:

ps -ef | grep tomcat  

如果tomcat正在运行,这将返回tomcat路径

netstat -a | grep 8080

其中8080​​是tomcat端口


7

如果tomcat是本地安装的,请在浏览器窗口中键入以下URL:{localhost:8080}

这将显示Tomcat主页,并显示以下消息。

如果看到此消息,则说明您已经成功安装了Tomcat。恭喜你!

如果tomcat安装在单独的服务器上,则可以使用有效的主机名或安装了tomcat的Iess键入replace localhost。

以上适用于标准安装,其中tomcat使用默认端口8080


19
如果Tomcat安装在单独的服务器上,则无法从浏览器访问Tomcat不会告诉您它是否正在运行:它可能无法访问。
Marco Lackovic

我已经在Ubuntu上安装了Tomcat8,但是转到localhost:8080则显示“无法连接”消息。
ibodi

1
如果您在Linux上具有无头服务器,则不能选择此选项。
克劳斯·纳吉

5

wget urlcurl url url是要使用的tomcat服务器的url,例如: wget http://localhost:8080。然后检查退出代码,如果它是0-tomcat启动。


4

创建一个Shell脚本来检查tomcat是启动还是关闭,并为sh设置cron以使其每隔几分钟检查一次,如果down,则自动启动tomcat。下面的代码示例片段

TOMCAT_PID=$(ps -ef | awk '/[t]omcat/{print $2}')
echo TOMCAT PROCESSID $TOMCAT_PID

if [ -z "$TOMCAT_PID" ]
then
    echo "TOMCAT NOT RUNNING"
    sudo /opt/tomcat/bin/startup.sh
else
   echo "TOMCAT RUNNING"
fi

我创建了一个shell脚本,即使我停止了tomcat,它也总是返回“ TOMCAT RUNNING”。但是,当我在控制台上运行命令时,它运行良好。
查尔斯·帕姆

确保shell脚本名称不作为tomcat关键字。如果脚本具有tomcat名称,则在进程列表中将显示shell脚本名称,代码将认为tomcat正在运行。您可以给脚本中没有tomcat关键字的任何名称
Devendra Dora,

3

我发现Tomcat非常挑剔,因为运行的进程或开放的端口并不一定意味着它实际上在处理请求。我通常尝试获取一个已知页面,并将其内容与预先计算的期望值进行比较。


3

我经常做

tail -f logs/catalina.out

当我看到那里

INFO: Server startup in 77037 ms

那么我知道服务器已启动。


2

您是否正在尝试建立警报系统?对于简单的“心跳”,请对Tomcat端口执行HTTP请求。

为了进行更详细的监视,您可以设置JMX和/或SNMP来查看JVM统计信息。我们使用SNMP插件(桥接到JMX)运行Nagios,以每10-15分钟检查Tomcat内存使用情况并请求线程池大小。

http://tomcat.apache.org/tomcat-6.0-doc/monitoring.html

更新(2012):

我们已经升级了系统,以使用“监视”检查tomcat的过程。我很喜欢。通过很少的配置,它会自动验证服务是否正在运行,如果没有运行,则会自动重新启动。(发送电子邮件警报)。它可以与/etc/init.d脚本集成或按进程名称检查。


1

由于我的tomcat实例被命名为tomcat_。例如。tomcat_8086,我用

ps aux | grep tomcat

其他方法是使用nc实用程序

nc -l 8086 (端口号)

要么

ps aux | grep java


1

试试这个命令

ps -ef | awk '/[t]omcat/{print $2}' 

如果tomcat正在运行,它将返回pid。


0
$ sudo netstat -lpn |grep :8080

检查端口号

$ ps -aef|grep tomcat

服务器下是否正在运行任何tomcat。

tsssinfotech-K53U infotech # ps -aef|grep tomcat

根9586 9567 0 11:35 pts / 6 00:00:00 grep --colour = auto tomcat


0

基本上你想测试

  1. 与您的tomcat实例的连接
  2. 收集一些基本统计数据
  3. UNIX进程是否正在运行

我将评估前两个选项,因为第三个选项已经得到足够的回答。

最简单的方法是在WebApp上开发一个网页,该网页收集一些基本指标,并拥有一个可以读取结果或检测连接问题的客户端。

为此,您有几个问题


0

这是我的两分钱。

我的群集设置有多个运行在不同端口上的tomcat实例。我使用以下命令来检查在不同端口上运行的每个进程。

/sbin/fuser 8080/tcp

根据需要更换端口号。

并使用-k以上命令杀死进程。

  • 这比ps -ef调用一个命令并grep在其上调用另一个命令的方式或任何其他命令要快得多。
  • 可以与tomcat的多次安装或任何其他使用端口的服务器(实际上在同一服务器上运行)一起很好地工作。

BSD操作系统上的等效命令为fstat


0

tomcat.sh 帮助您轻松了解这一点。

tomcat.sh用法文档说:

无参数:显示tomcat的process-id(如果正在运行),否则不执行任何操作

因此,在命令提示符下运行命令并检查pid:

$ tomcat.sh

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.