检查Tomcat是否通过shell脚本运行

时间:2012-08-10 09:17:43

标签: shell tomcat

我需要通过shell脚本检查Tomcat是否在我的系统中运行。如果不是,我需要捕获进程ID并杀死Tomcat。如何实现?

4 个答案:

答案 0 :(得分:10)

为了获得正在运行的进程,我使用了这个命令:

ps x | grep [full_path_to_tomcat] | grep -v grep | cut -d ' ' -f 1

但是,你必须要小心。它适用于我的设置,但它可能无法在任何地方运行...我有两个tomcat安装,一个是端口8080上的/ usr / local / tomcat和端口8081上的/ usr / local / tomcat_8081。我必须使用'/ usr / local / tomcat /'(带有最后的斜杠)作为full_path,否则如果tomcat_8081正在运行,它将返回2个不同的pid。

以下是对此命令执行操作的说明:

1)ps x为您提供按pid,tty,stat,time running和command命令的正在运行的进程列表。

2)将grep [full_path_to_tomcat]应用于它将在该列表中找到模式[full_path_to_tomcat]。例如,运行ps x | grep /usr/local/tomcat/可能会获得以下信息:

13277 ?        Sl     7:13 /usr/local/java/bin/java -Djava.util.logging.config.fil
e=/usr/local/tomcat/conf/logging.properties [...] -Dcatalina.home=/usr/local/tomca
t [...]
21149 pts/0    S+     0:00 grep /usr/local/tomcat/

3)由于grep /usr/local/tomcat/与模式匹配,我们得到2个条目而不是1个条目,让我们删除它。 -v是grep的反转匹配标志,这意味着它只会选择与模式不匹配的行。因此,在前面的示例中,使用ps -x | grep /usr/local/tomcat/ | grep -v grep将返回:

13277 ?        Sl     7:13 /usr/local/java/bin/java -Djava.util.logging.config.fil
e=/usr/local/tomcat/conf/logging.properties [...] -Dcatalina.home=/usr/local/tomca
t [...]

4)很酷,现在我们有了我们需要的pid。尽管如此,我们还需要解决所有其他问题。为此,我们使用cut。此命令从FILE或标准输出中删除部分。 -d选项是分隔符,-f是您需要的字段。大。所以我们可以使用空格('')作为分隔符,并获得第一个字段,它对应于pid。正在运行ps x | grep /usr/local/tomcat/ | grep -v grep | cut -d ' ' -f 1将返回:

13277

您需要的是什么。要在脚本中使用它,这很简单:

#replace below with your tomcat path
tomcat_path=/users/tomcat/apache-tomcat-8.0.30
pid=$(ps x | grep "${tomcat_path}" | grep -v grep | cut -d ' ' -f 1)
if [ "${pid}" ]; then
  eval "kill ${pid}"
fi

答案 1 :(得分:4)

使用wget检查服务器地址并检查状态的一种方法。

点击此链接:

http://www.velvettools.com/2013/07/shell-script-to-check-tomcat-status-and.html#.VX_jfVz-X1E

TOMCAT_HOME=/usr/local/tomcat-folder/

is_Running ()
{

        wget -O - http://yourserver.com/ >& /dev/null
 if( test $? -eq 0 ) then
  return 0
 else
  return 1
 fi
}



stop_Tomcat ()
{
 echo "shutting down......"
 $TOMCAT_HOME/bin/shutdown.sh
}

start_Tomcat ()
{
 echo "starting......"
 $TOMCAT_HOME/bin/startup.sh
}

restart ()
{
 stop_Tomcat
 sleep 10
 kill_Hanged_Processes
 start_Tomcat
 sleep 60
}

答案 2 :(得分:1)

这样做的简单方法是:

 ps -ef | grep tomcat

使用此命令,您将获得:

user [id-to-kill] Date [tomcat-path]

最后一步是杀死进程

sudo kill -9 [id-to-kill]

祝贺你的过程被杀了lOol

答案 3 :(得分:0)

Tomcat的默认端口是8080.你可以在比较循环中使用grep并使用端口状态。

#!/bin/bash
STAT=`netstat -na | grep 8080 | awk '{print $7}'`
if [ "$STAT" = "LISTEN" ]; then
    echo "DEFAULT TOMCAT PORT IS LISTENING, SO ITS OK"
elif [ "$STAT" = "" ]; then 
    echo "8080 PORT IS NOT IN USE SO TOMCAT IS NOT WORKING"
    ## only if you defined CATALINA_HOME in JAVA ENV ##
    cd $CATALINA_HOME/bin
    ./startup.sh
fi
RESULT=`netstat -na | grep 8080 | awk '{print $7}' | wc -l`
if [ "$RESULT" = 0 ]; then
    echo "TOMCAT PORT STILL NOT LISTENING"
elif [ "$RESULT" != 0 ]; then
    echo "TOMCAT PORT IS LISTENINS AND SO TOMCAT WORKING"
fi

这样你可以比较script.you grep端口8080,如果你使用tomcat的默认端口。这只会检查tomcat是否正在运行。 然后你可以使用端口检查进程 lsof -i:8080 //如果使用端口8080

如果要通过使用此命令终止进程来释放端口,请使用此命令 kill 75782 //如果例如75782是使用端口的进程