o/s를 알수 없어 그냥 평범하게(?) 사용되는 linux에서는 아래와 같이 해 보세요.

apache + tomcat 이니 port는 80이 아니겠지요. 하여간 그래서 8080으로 해 봤습니다.

그리고 mon.sh는 port를 검색해서 값이 없으면 restart합니다만, 간혹 process는 있으나
정상적으로 service가 되지 않는 경우가 있지요. 그래서 그 부분까지 고려하면..


----  file name : /home/monitoring/mon.sh  ----> cut <------------
#!/bin/bash
# author : pungjoo

cd /home/monitoring

PID=`lsof -itcp:8080 | grep LISTEN | awk 'NR==1 {print $2}'`
CHECK=false

if [ ${PID} > 0 ]
then
	wget -q http://javaservice.net:8080/test/test.jsp
	
	if [ -f test.jsp ]
	then
		rm -f test.jsp
	else
		CHECK=true
	fi
	
     
else
        CHECK=true
fi

if [ ${CHECK} == "true" ]
then 
	/usr/local/tomcat/bin/tomcat.sh restart
fi
-----------------------------> cut <------------------------------

crontab을 이용해 아래 내용 등록하세요. 그럼 2분마다 작동합니다.

*/2 * * * * /home/monitoring/mon.sh > /dev/null 2>&1


http://siyeon.com/servlet/ReferenceView/595

따뜻한 하루 하루를 보내시길.....
-----------------------------------------------
현존하는 인 보다 죽어 나간 인이 더 많은 시점에
같은 공간 같은 시간 속에 우리네들은 서 있다.
==============================================================================================
생각해 보니 뭐하러 port를 검색했는지 모르겠네요..
^^;

그냥 wget만 해서 결과 없으면 문제 있는 것으로 간주 하면 되는 것을..

#!/bin/bash

cd /home/monitoring
wget -q http://javaservice.net:8080/test/test.jsp
	
if [ -f test.jsp ]
then
     rm -f test.jsp
else
     /usr/local/tomcat/bin/tomcat.sh restart
fi

따뜻한 하루 하루를 보내시길.....
-----------------------------------------------
현존하는 인 보다 죽어 나간 인이 더 많은 시점에
같은 공간 같은 시간 속에 우리네들은 서 있다.
===========================================================================================================================
OS가 윈도우의 경우에는 프로세스 확인도 어렵고 위처럼 쉽게 쉘 프로그래밍을 할 수 
있는 방법도 없었기에 아래와 같은 편법으로 톰캣 재기동을 할 수 있었습니다.
조금은 어설퍼 보이는 방법인데요, 더 좋은 방법이나 의견이 있다면 답글 달아 주세요.

절차
1. 항상 데몬이 돌고 있어도 괜찮고, 혹은 특정시간에 톰캣 프로세스를 확인합니다.
-> 이 확인하는 방법때문에 애를 먹었는데요, 본인은 이를 확인하기 위해 우선 
   웹상에서 윈도우의 프로세스를 확인하게 해주는 프리웨어 툴을 이용하였습니다. 
   이 툴은 실행되는 순간 프로세스 목록들을 list-up 해주는 기능도 있고, 
   특정 프로세스 이름으로 검색을하면 문자 형태로 프로세스의 존재 여부를 
   알려주기도 합니다.
   데몬 프로그램을 이용하여 process 확인 툴을 실행시킵니다.
2.프로세스 확인방법
-> 프로세스를 찾는 프로그램이 java로 짜져있고, 톰캣도 기동시 프로세스 이름이 
   java로 기동되기 때문에 이 두 프로세스를 구분하기는 불가능합니다. 
   혹은 자바로 돌고 있는 프로세스가 더 있다라고 가정할땐 정말 난감합니다.
   이럴경우 데몬으로 자바 프로세스를 검색하면 톰캣이 죽었음에도 불구하고 
   데몬프로그램도 자바 프로세스로 검출이 되기 때문에 언제나 톰캣이 살아있다는 
   응답만을 얻게됩니다.
-> 따라서, J2SE의 java.exe 파일을 tomcat.exe로 복사해 주고 톰캣 기동시에는 이 
   tomcat.exe를 참조하여 기동하게끔 만들어 두어 프로세스를 검색하게 되면 
   tomcat 으로 존재하게 됩니다.
-> 이를 이용하여 데몬프로그램은 tomcat 프로세스를 검색하게 되며, 
   톰캣이 죽었는지 살았는지를 알게됩니다.

3.톰캣 기동
-> 톰캣의 기동여부가 문자형태로 리턴되기 때문에 이 문자를 읽어 기동여부를 판단하고, 
   톰캣이 죽었을 경우에는 다시 톰캣을 기동시켜 주면 됩니다.
===========================================================================================================
저도 서버 뻗는 이유로 많이 고생했었습니다.^^;(유비무환의 중요성 실감)

쉘 프로그래밍으로 겨우 만들어서 설정했었지요..

물론 다운되는거 원인찾는게 우선일듯합니다. 

미리 설정해놓고 로그에 작성이나 메일링 하도록하여 

모니터링이 편하게 하도록 변경하셔도 될듯합니다.

	◈ 검색 서버 톰캣 자동 체크 및 재기동 ( Linux 용 )
		1. ps 네임 확인
			[root@search was]# ps -aux		
			root     20716  0.0  0.0  5204 1032 pts/1    S    16:55   0:00 /bin/sh j2sdk어쩌구 저쩌구.....

		2. 프로세스 명령어 확인
			[root@search was]# /bin/ps -elf | /bin/grep 'java' | /bin/grep 'j2sdk'
			root     20716  0.0  0.0  5204 1032 pts/1    S    16:55   0:00 /bin/sh j2sdk어쩌구 저쩌구.....

		3. shell 파일 생성  (XXXX.sh 내용)
			#!/bin/sh
			 
			while true ; do
			    /bin/date
			    echo 'checking tomcat'
			    if /bin/ps -elf | /bin/grep 'java' | /bin/grep 'j2sdk' then
				:
				echo 'WAS GOOD'
			    else
				echo 'WAS BAD'
				/usr/local/tomcat/bin/startup.sh
			    fi
			    sleep 60
			done
		
		4. shell 파일 실행
			[root@search was]# ./XXXX.sh &
		
		5. shell 실행 상태 체크 
			[root@search was]# ps -aux		
			root     20716  0.0  0.0  5204 1032 pts/1    S    16:55   0:00 /bin/sh ./XXXX.sh

	◈ 검색 서버 톰캣 자동 체크 및 재기동 ( Windows 용 )준비중
◈ 검색 서버 톰캣 자동 체크 및 재기동 ( Windows 용 )
  1. tomcat_monitor.vbs 파일 생성 ( 일부 소스 수정 )
   dim sCommand,sCommandTomcat
   dim objShell,objShellTomcat,objFSO,objTempFile,objTs
   dim sReadLine
   dim sameStr
   do while true
    set objShell = WScript.CreateObject(\\"WScript.Shell\\")
    set objShellTomcat = WScript.CreateObject(\\"WScript.Shell\\")
    set objFSO = CreateObject(\\"Scripting.FileSystemObject\\")


     sCommand = \\"cmd /c netstat -na > tomcat_monitor.txt\\"
     objShell.run sCommand, 0, true
     set objTempFile = objFSO.GetFile(\\"c:tomcat_monitor.txt\\")
     set objTS = objTempFile.OpenAsTextStream(1)
     
     resultCNT=0

    do while objTs.AtEndOfStream <> true
     sReadLine = objTs.ReadLine
     If Instr(1,sReadLine,\\":8009\\",0)>0 Then
      resultCNT=10 
      'Msgbox resultCNT
     End If
    loop

   'Msgbox resultCNT
    if resultCNT=0 Then
     'MsgBox \\"resultCNT\\" & resultCNT
     'sCommandTomcat=\\"C:\tomcat\bin\startup.bat\\"
     sCommandTomcat=\\"C:\tomcat_start.bat\\"
     objShellTomcat.run sCommandTomcat, 0, true
    End If

    Set sCommand = Nothing
    Set sCommandTomcat = Nothing
    Set objShell = Nothing
    Set objShellTomcat  = Nothing 
    Set objFSO = Nothing
    Set objTempFile = Nothing
    Set objTs = Nothing
    resultCNT=0

    'WScript.Sleep 200000
    WScript.Sleep 10000
   loop
  2. tomcat_monitor.vbs 실행 
  3. 작업관리자 >  프로세스 리스트 내 tomcat_monitor.vbs 관련 프로세스 생성확인체크

 

이 게시물을..