tomcat 스 크 립 트 고급 버 전 시작
8057 단어 tomcatshell스 크 립 트 관리
로그, 프로 세 스 시작 검사, 대량 상태 보기 등 기능 이 추가 되 어 있 습 니 다.
다음은 스 크 립 트 관련 내용 입 니 다. 어떤 글 씨 는 low 입 니 다. 더 좋 은 글 씨 를 생각 하지 못 했 습 니 다. 관심 있 는 것 은 메 시 지 를 남 길 수 있 습 니 다.
#!/bin/bash
# : tomcat 、 、 , tomcat
# :
# v1.0
# ,
template(){
echo "Usage: $0 -n appname -i node action"
echo "-n appname:specifies the application name"
echo "-i node:specifie node number of application,it must followed by the -n option."
echo "If the node is all,all nodes of application will be operated. "
echo "action start/restart/stop:start or stop or restart the specified application node"
exit 101
}
# getopt 、 ,
RST=$(getopt -o n:i: -- "$@")
if [ $? -ne 0 ];then
template
fi
eval set -- "$RST"
while [ -n "$1" ]
do
case "$1" in
-n)
if [[ "$2" =~ -. ]];then #
template;
fi
if [[ "$3" =~ -. ]];then
APPNAME="$2";
fi
if [[ $(ps aux | grep java|grep ${APPNAME}|wc -l) == 0 ]];then
template;
shift 2
fi;;
-i)
if [[ "$2" =~ -. ]];then#
template
fi
if [[ "$3" =~ -. ]];then
NODE="$2";
# , all,
if [[ $(echo ${NODE}|grep -E '^[0-9]+$|all') == "" ]];then
echo "Error type!Argment with $1 must be init or all!"
template
fi
shift 2
fi;;
--)
shift;
break;;
*)
template
break;;
esac
done
#
init_args(){
export DAY=$(date +%Y-%m-%d)
export TIME=$(date +%H-%M-%S)
export ALIVE=$(echo -e "\e[1;32m[ALIVE]\e[0m")
export NULL=$(echo -e "\e[1;31m[N/A]\e[0m")
export ERROR=$(echo -e "\e[1;31m[ERROR]\e[0m")
export WARNING=$(echo -e "\e[1;33m[WARNING]\e[0m")
[ ! -d ${HOME}/scripts/logs ];mkdir -p ${HOME}/scripts/logs
[ ! -d ${HOME}/scripts/logs/tomcat.log ];touch ${HOME}/scripts/logs/tomcat.log
export LOG_FILE=${HOME}/scripts/logs/tomcat.log
}
#
log(){
DATE=$(date +"[%Y-%m-%d %H:%M:%S]")
echo ${DATE} $*
echo ${DATE} $* >> ${LOG_FILE}
}
#tomcat , 60 ,
timeout_start() {
WAITFOR=60
COMMAND=$*
${COMMAND} &
COMMANDPID=$!
( sleep ${WAITFOR} ; echo '1' >temp.log && kill -9 ${COMMANDPID} >/dev/null 2>&1 ) &
SLEEPPID=${PPID}
wait ${COMMANDPID} >/dev/denull 2>&1
kill ${SLEEPPID} > /dev/null 2>&1
}
check_err(){
if [[ $(cat temp.log) == 1 ]];then
rm temp.log
log $*
fi
}
start(){
WORK_DIR=${HOME}/${APPNAME}
if [[ "${NODE}" == all ]];then
# , , , , ,
NODE_NUMS=$(ls ${WORK_DIR}|grep tomcat_${APPNAME}.*|wc -l)
for i in $(seq 1 ${NODE_NUMS})
do
NODE_PID=$(ps aux | grep java|grep tomcat_${APPNAME}_$i|grep -v grep|awk '{print $2}')
if [[ $(echo ${#NODE_PID}) != 0 ]];then
read -p "${WARNING} Process ${APPNAME} node $i is running now!Do you want to restart it?(Y|N)" input
case $input in
Y|y)
log " stop ${APPNAME} node is $i pid is ${NODE_PID}}"
kill -9 ${NODE_PID};;
n|N)
echo "${WARNING}: ${APPNAME} node $i pid ${NODE_PID} is already start!"
continue;;
esac
else
cd ${WORK_DIR}/tomcat_${APPNAME}_$i/bin
log " start ${APPNAME} node is $i pid is ${NODE_PID}"
sh startup.sh > /dev/null 2>&1
timeout_start tail -f ../logs/catalina.${DAY}.log | while read line
do
TAIL_PID=$(ps aux | grep "tail -f ../logs/catalina.${DAY}.log"|awk '{print $2}')
if [[ $line =~ .*Server\ startup\ in.* ]];then
kill -9 ${TAIL_PID}
fi
done
check_err " ${ERROR} ${APPNAME} node $i start timeout!"
fi
done
# , , ,
elif [[ ${NODE} != all ]];then
NODE_PID=$(ps aux | grep tomcat_${APPNAME}_${NODE}|grep -v grep|awk '{print $2}')
if [[ $(echo ${#NODE_PID}) != 0 ]];then
read -p "${WARNING} Process ${APPNAME} node ${NODE_PID} is running now!Do you want to restart it?(Y|N)" input
case $input in
Y|y)
log " stop ${APPNAME} node is ${NODE} pid is ${NODE_PID}}"
kill -9 ${NODE_PID};;
n|N)
echo "${WARNING}: ${APPNAME} node ${NODE} pid ${NODE_PID} is already start!"
continue;;
esac
else
cd ${WORK_DIR}/tomcat_${APPNAME}_${NODE}/bin
sh startup.sh > /dev/null 2>&1
timout_start tail -f ../logs/catalina.${DAY}.log| while read line
do
TAIL_PID=$(ps aux | grep "tail -f ../logs/catalina.${DAY}.log"|awk '{print $2}')
if [[ $line =~ .*Server\ startup\ in.* ]];then
kill -9 ${TAIL_PID}
fi
done
check_err " ${ERROR} ${APPNAME} node ${NODE} start timeout!"
fi
fi
}
stop(){
if [[ "${NODE}" == all ]];then
NODE_PID=$(ps aux | grep java | grep tomcat_${APPNAME}| grep -v grep | awk '{print $2}')
m=0
for i in ${NODE_PID[@]}
do
m=$(expr $m+1)
log " stop ${APPNAME} node $m pid is $i "
kill -9 ${NODE_PID}
done
else
NODE_PID=$(ps aux | grep java | grep tomcat_${APPNAME}_${NODE}|grep -v grep | awk '{print $2}')
log " stop ${APPNAME} node ${NODE} pid is ${NODE_PID} "
kill -9 ${NODE_PID}
fi
}
status(){
echo "System time is : ${DAY} ${TIME}"
echo "${APPNAME} proccess status, node is ${NODE}"
echo " ------------------------------------------------- "
printf "|\t%-10s|\t%-10s|\t%-10s|
" namepidstatus
echo " ------------------------------------------------- "
if [[ "${NODE}" == all ]];then
NODES=$(ls ${HOME}/${APPNAME}|grep tomcat_${APPNAME}| wc -l)
for i in $(seq 1 ${NODES})
do
cd ${HOME}/${APPNAME}
NODE_NAME=$(ls tomcat_${APPNAME}_${i})
NODE_PID=$(ps aux | grep java | grep ${NODE_NAME}|grep -v grep | awk '{print $2}')
if [[ $(echo ${#NODE_PID}) == 0 ]];then
NODE_STATUS=${NULL}
else
NODE_STATUS=${ALIVE}
fi
printf "|\t%-10s|\t%-10s|\t%-10s|
" ${NODE_NAME} ${NODE_PID} ${NODE_STATUS}
done
else
NODE_NAME=$(ls ${HOME}/${APPNAME}/tomcat_${APPNAME}_${NODE})
NODE_PID=$(ps aux | grep java | grep ${NODE_NAME}|grep -v grep | awk '{print $2}')
if [[ $(echo ${#NODE_PID}) == 0 ]];then
NODE_STATUS='N/A'
else
NODE_STATUS='Alive'
fi
printf "|\t%-10s|\t%-10s|\t%-10s|
"${NODE_NAME} ${NODE_PID} ${NODE_STATUS}
fi
echo " ------------------------------------------------- "
}
#
init_args
#
case $1 in
start)
start;;
stop)
stop;;
restart)
stop;
start;;
status)
status;;
*)
template;;
esac
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
EC2 인스턴스에 Tomcat 설치전제 조건: Amazon 계정이 있어야 합니다. Amazon 계정에 로그인하고 EC2 인스턴스를 시작합니다. 여기에서 프리 티어를 선택했고 Amazon Linux 2를 실행하는 EC2 인스턴스를 시작했습니다. 시작 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.