2012-08-10 6 views
4

Tomcat이 쉘 스크립트를 통해 시스템에서 실행되고 있는지 확인해야합니다. 그렇지 않다면 나는 프로세스 ID를 잡아서 Tomcat을 죽일 필요가있다. 그것이 어떻게 성취 될 것인가?쉘 스크립트를 통해 Tomcat이 실행 중인지 확인하십시오.

+0

이 정의는 "실행". 일반적인 정의에 따르면 실행 중이 아닌 프로세스 ID가 없으므로 죽일 수 없습니다. 나는 여기서 당황하지 않고있다. 당신은 아마도 "요청을 적절히 처리하고있다"는 것을 의미 할 것이며 일단 정의 할 수 있다면 스크립트를 작성하는 방법을 알게 될 것입니다. (또한, 당신은 Serverfault를 시도해보십시오, 그들은 시스템 모니터링에 대한 더 많은 경험을 가지고 있습니다.) – derobert

+0

@BugFinder :이 명령을 사용해 보았습니다 : pid = $ (ps -fe | grep tomcat). 이것은 컨텍스트 '바람둥이'로 모든 프로세스를 얻습니다. killall을 사용했다. –

답변

8

를 사용하는 과정입니다,이 명령을 사용했습니다. 그것은 내 설정에서 작동하지만 사방에 실행할 수 없습니다 ... 나는 바람둥이의 두 설치, 하나는/usr/local/tomcat 8080 포트와/usr/local/tomcat_8081 포트 8081에 있습니다. 나는 '/ usr/local/tomcat/'(마지막 슬래시 포함)을 full_path로 설정해야합니다. 그렇지 않으면 tomcat_8081도 실행 중일 때 2 개의 다른 pid를 반환하기 때문입니다.

다음은이 명령이하는 일에 대한 설명입니다 :

1) ps x 당신에게 PID, TTY, STAT, 시간 실행 명령으로 주문 실행중인 프로세스의 목록을 제공합니다.

2) grep [full_path_to_tomcat]을 적용하면 해당 목록에서 [full_path_to_tomcat] 패턴을 찾을 수 있습니다. 예를 들어, ps x | grep /usr/local/tomcat/를 실행하면 다음과 같은 당신을 얻을 수 있습니다 : 우리는 패턴과 일치 인해 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)의 그것을 제거 할 수 있습니다. -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 
+4

Verbose and good answer. 내가 할 유일한 일은'cut' 대신'awk'을 사용하는 것입니다 : 'ps axuw | grep path/to/tomcat | grep -v grep | awk '{print $ 2} '' – atripes

+0

내게는 작동하지 않습니다 ... 내 바람둥이가 있습니다. "ps -ef | grep tomcat"으로 pid를 볼 수 있지만 위의 명령은 아무 것도 반환하지 않습니다. –

+0

@WilliansMartins tomcat_path를 실제 경로로 대체 했습니까? 당신은 단지'grep tomcat'을 대신 사용할 수있는 하나의 tomcat 설치 만 가지고 있습니다 . – Tarek

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 

당신이 바람둥이가 실행되고 있는지 여부 만 확인합니다 tomcat.this의 기본 포트를 사용하는 경우가 script.you의 그렙 포트 8080을 비교할 수 있습니다 이런 식으로. 는 당신이 포트를 사용하여 프로세스를 확인할 수 있습니다 lsof를 -i : 8080 // 당신이이 명령을 사용하여 프로세스를 종료하여 포트를 해제하려면 가 75,782을 죽일 포트를 8080

을 사용하는 경우 //를위한 경우 하지만,

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

당신은 조심해야 : 예 75782은 실행중인 프로세스를 얻기 위해 포트

+0

코드 서식을 수정하기 위해 게시물을 수정했습니다. 나중에 참조 할 수 있도록 {} 버튼은 선택 사항을 코드로 표시합니다 (각 행의 앞에 4 개의 공백을 삽입 함). – derobert

+0

해결책이 당신에게 도움이되었다는 것이 좋음 – dansh

+0

@gopinagh : 분명히 말하자면, 이것은 대장의 해결책이지 내 것이 아닙니다. 그래도 다행이라고 들었습니다. – derobert

1

그렇게 할 수있는 쉬운 방법은 다음과 같습니다 당신은

ps -ef | grep tomcat 

이 명령을 사용하여 얻을 수 있습니다 :

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

마지막 단계 프로세스를 죽이고있다

sudo kill -9 [id-to-kill] 

축하합니다. 프로세스가 종료되었습니다. lol

+0

톰캣이 실행 중이 지 않은 프로세스도 보여줍니다'1000 8309 4960 0 20:51 pts/1 00:00:00 grep - color = auto tomcat' 또는 아무것도 찾지 않으면 존재하지 않으면 ('neo44'),'$ ps aux | grep neo44 1000 8397 0.0 0.0 13640 952 pts/1 S + 20:53 0:00 grep --color = auto neo44' – prayagupd

+0

'ps -ef | grep tomcat'은 "grep tomcat"프로세스를 포함하여 "tomcat"을 가진 출력에서 ​​아무것도 찾지 않습니다. -v 플래그를 사용하여 이렇게 필터링 할 수 있습니다.'ps -ef | grep 바람둥이 | grep -v grep','pgrep' 또는 좀 더 배포판과 설정에 특화된'service tomcat status' 같은 것을 사용하십시오. – CodeShane

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 
} 
+0

제공하는 솔루션에 대한 설명을 추가하여 답을 자세히 설명해 주시겠습니까? – abarisone

+0

희망은 지금 분명합니다. – jafarmlp

관련 문제