守护模式启动脚本改进2020/2/21
- catalina_home需要有deamon.sh启动脚本
- 脚本放到logs,config,work,temp,work,webapps同级目录,即catalina_base目录下且添加执行权限
- 通过daemonServer.sh init初始化脚本,选择合适的JAVA_HOME,CATALINA_HOME,CATALINA_BASE和PROG
- 通过daemonServer.sh upgrade更新脚本需要把war包放到脚本同级目录上
vim daemonServer.sh
# !/bin/bash # description: tomcat daemon script # chkconfig: 2345 10 90 # auther by wangxp #java和catalina相关目录设置 export JAVA_HOME=/u01/java_home/jdk1.8.0_181 export CATALINA_HOME=/u01/catalina_home/apache-tomcat-9.0.46 export CATALINA_BASE=/u01/znsf/tomcat_8901 #启动用户 export CATALINA_USER=root #程序名称 export PROG=tomcat_8901 #服务启动等待时间 export CATALINA_SERVICE_START_WAIT_TIME=10 #进程pid号 export CATALINA_PID=$CATALINA_BASE/conf/$PROG.pid CURRENT_DATE=$(date +%Y%m%d) CURRENT_TIME=$(date +%Y%m%d%H%M%S) CURRENT_PATH=`pwd` . /etc/rc.d/init.d/functions tomcatfun(){ cd $CATALINA_HOME/bin ./daemon.sh \ --java-home $JAVA_HOME \ --catalina-home $CATALINA_HOME \ --catalina-base $CATALINA_BASE \ --catalina-pid $CATALINA_PID \ --tomcat-user $CATALINA_USER \ --service-start-wait-time $CATALINA_SERVICE_START_WAIT_TIME $1 cd $CURRENT_PATH } #检查各种路径是否正确 function check { if [ `whoami` != $CATALINA_USER ];then echo -e "you must use \033[31m$CATALINA_USER\033[0m to excute" fi if test ! -d $JAVA_HOME;then echo -e "\033[31mError\033[0m: JAVA_HOME is not available" fi if test ! -d $CATALINA_HOME;then echo -e "\033[31mError\033[0m: CATALINA_HOME is not available" fi if test ! -d $CATALINA_BASE;then echo -e "\033[31mError\033[0m: CATALINA_BASE is not available" fi } case "$1" in start) echo "Starting Tomcat..." tomcatfun start if [ -f $CATALINA_PID ]; then echo -e "$PROG is \033[32mActive\033[0m" echo "pid=`cat $CATALINA_PID` `cat $CATALINA_BASE/conf/server.xml|grep 'protocol="HTTP/1.1"'|awk 'NR==1''{print $2}'`" else echo -e "$PROG started failed" fi ;; stop) echo "Stopping Tomcat..." tomcatfun stop if [ -f $CATALINA_PID ]; then echo "$PROG stopped failed" else echo -e "$PROG is \033[31mDead\033[0m" fi ;; restart) echo "restarting Tomcat..." tomcatfun stop sleep 1 tomcatfun start if [ -f $CATALINA_PID ]; then echo -e "$PROG is \033[32mActive\033[0m" echo "pid=`cat $CATALINA_PID` `cat $CATALINA_BASE/conf/server.xml|grep 'protocol="HTTP/1.1"'|awk 'NR==1''{print $2}'`" else echo -e "$PROG is \033[31mDead\033[0m" fi ;; status) if [ -f $CATALINA_PID ]; then echo -e "$PROG is \033[32mActive\033[0m" echo "pid=`cat $CATALINA_PID` `cat $CATALINA_BASE/conf/server.xml|grep 'protocol="HTTP/1.1"'|awk 'NR==1''{print $2}'`" else echo -e "$PROG is \033[31mDead\033[0m" fi ;; upgrade) ##检查最新打包文件是否已经上传 #生成war包数组 war_name_num=`find $CURRENT_PATH -maxdepth 1 -type f -name "*.war"| wc -l` if test $war_name_num -ge 1;then for(( i=0; i< ${war_name_num} ; i++ )) do war_name=`find $CURRENT_PATH -maxdepth 1 -type f -name "*.war" |awk "NR==($i+1)"` wars[$i]=${war_name##*/} done else echo "update source is not exist" exit 1 fi #选择war包 PS3="Select update source: " select a in ${wars[@]} do if test -z $a;then echo "Input error!" exit 1 fi war_name=$a break done #判断备份文件是否存在,不存在创建备份文件夹,然后停止项目 if test ! -d ${CATALINA_BASE}/backup/project/${CURRENT_DATE};then mkdir -p ${CATALINA_BASE}/backup/project/${CURRENT_DATE} fi if test ! -d ${CATALINA_BASE}/backup/logs/${CURRENT_DATE};then mkdir -p ${CATALINA_BASE}/backup/logs/${CURRENT_DATE} fi #停止项目 echo "Stopping Tomcat..." tomcatfun stop sleep 1 if [ -f $CATALINA_PID ]; then echo "$PROG stopped failed" exit 1 else echo -e "$PROG is \033[31mDead\033[0m" fi #拷贝日志和项目到备份文件夹 unzip -qod ${war_name%.*} ${war_name} if test -f $CATALINA_BASE/logs/catalina-daemon.out; then mv $CATALINA_BASE/logs/catalina-daemon.out ${CATALINA_BASE}/backup/logs/${CURRENT_DATE}/catalina-daemon.out-${CURRENT_TIME} if [ $? -eq 0 ];then echo "log backup complate. file:${CATALINA_BASE}/backup/logs/${CURRENT_DATE}/catalina-daemon.out-${CURRENT_TIME}" else echo "log backup failed!" exit fi else echo "log/catalina-daemon.out is not exist" fi if test -d $CATALINA_BASE/webapps/${war_name%.*}; then mv $CATALINA_BASE/webapps/${war_name%.*} ${CATALINA_BASE}/backup/project/${CURRENT_DATE}/${war_name%.*}-${CURRENT_TIME} if [ $? -eq 0 ];then echo "projet backup complate. file:${CATALINA_BASE}/backup/project/${CURRENT_DATE}/${war_name%.*}-${CURRENT_TIME}" else echo "project back failed!" exit fi else echo "webapps/${war_name%.*} is not exist" fi #移动项目 mv ${CATALINA_BASE}/${war_name%.*} ${CATALINA_BASE}/webapps if [ $? -ne 0 ];then echo "'mv' ${PROG}.war failed!" exit fi #启动项目 echo "Starting Tomcat..." tomcatfun start if [ -f $CATALINA_PID ]; then echo -e "$PROG is \033[32mActive\033[0m" echo "pid=`cat $CATALINA_PID` `cat $CATALINA_BASE/conf/server.xml|grep 'protocol="HTTP/1.1"'|awk 'NR==1''{print $2}'`" else echo -e "$PROG started failed" fi ;; log) if test -f ${CATALINA_BASE}/logs/catalina-daemon.out then tail -500f ${CATALINA_BASE}/logs/catalina-daemon.out else echo "${CATALINA_BASE}/logs/catalina-daemon.out is not found" fi ;; init) echo "daemonServer.sh init..." #生成JAVA_HOME和CATALINA_HOME数组 java_home_dir=`find / -maxdepth 2 -type d -name java_home|awk 'NR==1'` java_home_num=`find $java_home_dir -type d -name "jre" 2>/dev/null | wc -l` if test $java_home_num -ge 1;then for(( i=0; i< ${java_home_num} ; i++ )) do jre_home=`find $java_home_dir -type d -name 'jre' 2>/dev/null|awk "NR==($i+1)"` javas[$i]=${jre_home%/*} done else exit 1 fi catalina_home_dir=`find / -maxdepth 2 -type d -name catalina_home|awk 'NR==1'` catalina_home_num=`find $catalina_home_dir -type f -name "daemon.sh" 2>/dev/null | wc -l` if test $catalina_home_num -ge 1;then for(( i=0; i< ${catalina_home_num} ; i++ )) do catalina_home=`find $catalina_home_dir -type f -name "daemon.sh"|awk "NR==($i+1)"` catalinas[$i]=${catalina_home%/bin*} done else exit 1 fi #设置JAVA_HOME PS3="Select JAVA_HOME: " select a in ${javas[@]} do if test -z $a then echo "Input error!" exit 1 fi sed -r -i "s&^export JAVA_HOME=.*&export JAVA_HOME=${a}&g" $0 echo -e "\033[32mJAVA_HOME=${a}\033[0m" break done #设置CATALINA_HOME PS3="Select CATALINA_HOME: " select a in ${catalinas[@]} do if test -z $a then echo "Input error!" exit 1 fi sed -r -i "s&^export CATALINA_HOME=.*&export CATALINA_HOME=${a}&g" $0 echo -e "\033[32mCATALINA_HOME=${a}\033[0m" break done #设置CATALINA_BASE read -p "Set CATALINA_BASE=${CURRENT_PATH} (yes|1)? " INPUT while true;do case $INPUT in 1|yes) sed -r -i "s&^export CATALINA_BASE=.*&export CATALINA_BASE=$CURRENT_PATH&g" $0 echo -e "\033[32mCATALINA_HOME=$CURRENT_PATH\033[0m" break ;; *) echo "Input ERROR!" exit 1 esac done #设置PROG prog=${CURRENT_PATH##*/} read -p "Set PROG=$prog (yes|1)? " INPUT while true;do case $INPUT in 1|yes) sed -r -i "s&^export PROG=.*&export PROG=$prog&g" $0 echo -e "\033[32mPROG=$prog\033[0m" break ;; *) echo "Input ERROR!" exit 1 esac done echo "daemonServer.sh initialized successfully" ;; *) echo "Usage: $PROG {start|stop|restart|status|upgrade|log|init}" ;; esac exit 0
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端