我需要通过shell脚本检查Tomcat是否在我的系统中运行。如果不是,我需要捕获进程ID并杀死Tomcat。如何实现?
答案 0 :(得分:10)
为了获得正在运行的进程,我使用了这个命令:
ps x | grep [full_path_to_tomcat] | grep -v grep | cut -d ' ' -f 1
以下是对此命令执行操作的说明:
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是使用端口的进程