Linux 운영 체제(특히 Oracle Linux 및 RHEL)에서 실행되도록 WebLogic Server 중단 스레드 경고 스크립트를 편집하려고 합니다.
온라인에서 다양한 스크립트를 보고 아래와 같이 일부 편집하여 준비했습니다.
내 목표는 걸린 스레드의 총 수를 찾아서 jstack
이 숫자가 0보다 큰 경우 각 Java 프로세스에 대해 각각 걸린 스레드 세부 정보(호스팅 서버 이름 포함)가 포함된 이메일을 보내는 것입니다. 중단된 스레드가 없으면 OKAY
파일에 쓰고 스크립트가 다시 실행될 때까지 기다립니다.
checkstucklog=/home/weblogic/lastStuckCheck.log
DATE=`date +"%Y_%m_%d %H:%M:%S"`
#count="$(ps -ef | grep Dweblogic | cut -c 10-15 | tr -d ' ' | xargs jstack -F | tee /home/weblogic/msALL_stuck.log_`/usr/bin/date +\%m-\%d-\%y-\%H-\%M` | grep STUCK | wc -l)"
count="$(ps -ef | grep Dweblogic | cut -c 10-15 | tr -d ' ' | xargs jstack -F -l | tee /home/weblogic/msALL_stuck_$DATE.log | grep STUCK | wc -l)"
if [ $count > 0 ]
then
echo "\n Server has stuck threads" `/usr/bin/date +\%m-\%d-\%y-\%H-\%M` | mail -s 'STUCK thread on server' your_mail_address@mail_address.com > $Sfile
else
echo "\n Stuck Thread Status = OKAY" > $checkstucklog
fi
exit
그러나 나는 bash 스크립팅에 약간 약합니다. 다음 스크립트가 작동하도록 도와주실 수 있나요?
- 나는 대본을 올바른 방식으로 쓰고 있는가?
- 티셔츠 대신 다른 대안을 생산할 수 있나요?
아직 중단된 스레드가 없기 때문에 이 스크립트의 기능을 확인할 수 없습니다. 그러나 나는 이것이 효과가 없을 것이라고 생각합니다. 운영 체제 프로세스 내에서 보면 호스팅 서버 이름을 인쇄하는 방법을 찾을 수 없습니다.
답변1
다시 생각해 보아야 할 몇 가지 사항을 알려 드리겠습니다.
대기줄:
count="$(ps -ef | grep Dweblogic | cut -c 10-15 | tr -d ' ' | xargs jstack -F -l | tee /home/weblogic/msALL_stuck_$DATE.log | grep STUCK | wc -l)"
DATE
내부에 공백이 있는 변수를 사용합니다 . (공백 대신 다른 문자를 사용하여) 이런 식으로 생성하면 더 좋을 것입니다.
DATE=`date +"%Y_%m_%d_%H:%M:%S"`
일부를 제거하기 위해 명령을 다시 작성할 수도 있습니다 awk
.
count="$(ps -ef | awk '/Dweblogic/ {print $2}' | xargs jstack -F -l | tee /home/weblogic/msALL_stuck_$DATE.log | grep STUCK | wc -l)"
jstack
명령어 에 대하여 : Weblogic을 사용할 때에는 Oracle java(동일회사 제품)를 사용하는 것이 현명합니다. Oracle Java에는 jstack
그러한 옵션이 없습니다 -F
.
저는 Oracle Java가 상용 제품이라는 것을 알고 있지만, 제가 기억하는 한 Oracle 제품(이 경우 WebLogic)을 사용하면 Java를 무료로 사용할 수 있습니다. 하지만 이 경우 법무 부서에 문의하는 것이 가장 좋습니다(라이센스 계약 확인).
숫자를 비교할 때 bash
권장되는 형식은 다음과 같습니다.
if [ "$count" -gt 0 ]
좋은 방법은 변수를 큰따옴표로 묶는 것입니다. 특히 변수가 동적으로 생성되는 경우에는 더욱 그렇습니다.