`

脚本化的Web应用服务管理

阅读更多

这篇文章只是自己学习的东西,有兴趣的同学,可以看看。

#!/bin/bash
if [ $# -lt 1 ];
then
  echo "USAGE: $0 classname opts"
  exit 1
fi

JAR_PATH=`ls *.jar`
if [[ ! "$?" == "0" || ! -e $JAR_PATH ]]; then
	echo "Do you forget ./package.sh ?"
	exit 2
fi

JAVA_VERSION=1.8
PID_FILE="../$JAR_PATH.pid"
BASE_DIR=$(dirname $0)
if [ "$JAVA_VERSION" == "1.8"  ]; then
	JDK_PATH=/usr/local/jdk8
else
	JDK_PATH=/usr/local/jdk
fi
KEYWORD="$JAR_PATH"

function test_java_version() {
	java_version=`$1/java -version 2>&1 |awk 'NR==1{ print $3  }'|sed 's/\"//g'`
	if [[ ! "$java_version" =~ "$JAVA_VERSION" ]];then
		return 1
	fi
	return 0
}

if [ -z "$JAVA_HOME" ]; then
  JAVA_HOME=$JDK_PATH
fi

if ! test_java_version "$JAVA_HOME/bin" ;then
	echo "$JAVA_HOME version not match"

	if [[ ! -d "$JDK_PATH" ]];then
		echo "$JDK_PATH not exist!"
		exit 2
	fi

	if test_java_version "$JDK_PATH/bin"; then
		export JAVA_HOME="$JDK_PATH"
	else
		echo "java version not match!"
		exit 3
	fi
fi


JAVA_OPTS="$JAVA_OPTS -server -Xms2g -Xmx2g -Xmn1g"
JAVA_OPTS="$JAVA_OPTS -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=70 -XX:+CMSParallelRemarkEnabled -XX:SoftRefLRUPolicyMSPerMB=0 -XX:+CMSClassUnloadingEnabled -XX:SurvivorRatio=8 -XX:+DisableExplicitGC"
JAVA_OPTS="$JAVA_OPTS -verbose:gc -Xloggc:${HOME}/gc.log -XX:+PrintGCDetails"
JAVA_OPTS="$JAVA_OPTS -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/home/admin/logs"
JAVA_OPTS="$JAVA_OPTS -XX:-OmitStackTraceInFastThrow"
JAVA_OPTS="$JAVA_OPTS -Djava.ext.dirs=${JAVA_HOME}/jre/lib/ext"
JAVA_OPTS="$JAVA_OPTS -jar "
#JAVA_OPTS="$JAVA_OPTS -Xdebug -Xrunjdwp:transport=dt_socket,address=9555,server=y,suspend=n"
JAVA="$JAVA_HOME/bin/java"


# Returns 0 if the process with PID $1 is running.
function checkProcessIsRunning {
   local pid="$1"
   ps -ef | grep java | grep $pid | grep "$KEYWORD" | grep -q --binary -F java
   if [ $? -ne 0 ]; then return 1; fi
   return 0;
}

# Returns 0 when the core is running and sets the variable $pid to the PID.
function getServicePID {
   if [ ! -f $PID_FILE ]; then return 1; fi
   pid="$(<$PID_FILE)"
   checkProcessIsRunning $pid || return 1
   return 0; }

function startServiceProcess {
   touch $PID_FILE
   rm -rf nohup.log
   nohup $JAVA $JAVA_OPTS $KEYWORD >> nohup.log 2>&1 & echo $! > $PID_FILE
   sleep 0.1
   pid="$(<$PID_FILE)"
   if checkProcessIsRunning $pid; then :; else
      echo "$SERVICE_NAME start failed, see nohup.log."
      return 1
   fi
   return 0;
}

function stopServiceProcess {
   STOP_DATE=`date +%Y%m%d%H%M%S`
   kill $pid || return 1
   for ((i=0; i<10; i++)); do
      checkProcessIsRunning $pid
      if [ $? -ne 0 ]; then
         rm -f $PID_FILE
         return 0
         fi
      sleep 1
      done
   echo "\n$SERVICE_NAME did not terminate within 10 seconds, sending SIGKILL..."
   kill -s KILL $pid || return 1
   local killWaitTime=15
   for ((i=0; i<10; i++)); do
      checkProcessIsRunning $pid
      if [ $? -ne 0 ]; then
         rm -f $PID_FILE
         return 0
         fi
      sleep 1
      done
   echo "Error: $SERVICE_NAME could not be stopped within 10 + 10 seconds!"
   return 1;
}

function startService {
   getServicePID
   if [ $? -eq 0 ]; then echo "$SERVICE_NAME is already running"; RETVAL=0; return 0; fi
   echo -n "Starting $SERVICE_NAME..."
   startServiceProcess
   if [ $? -ne 0 ]; then RETVAL=1; echo "failed"; return 1; fi
   COUNT=0
   while [ $COUNT -lt 1 ]; do
    for (( i=0;  i<60;  i=i+1 )) do
        STR=`grep "Dubbo core server started" nohup.log`
        if [ ! -z "$STR" ]; then
            echo "PID=$pid"
            echo "Server start OK in $i seconds."
            break;
        fi
	    echo -e ".\c"
	    sleep 1
	done
	break
    done
echo "OK!"
#START_PIDS=`ps  --no-heading -C java -f --width 1000 | grep "$DEPLOY_HOME" |awk '{print $2}'`
#echo "PID: $START_PIDS"
#   echo "started PID=$pid"
   RETVAL=0
   return 0;
}

function stopService {
   getServicePID
   if [ $? -ne 0 ]; then echo -n "$SERVICE_NAME is not running"; RETVAL=0; echo ""; return 0; fi
   echo "Stopping $SERVICE_NAME... "
   stopServiceProcess
   if [ $? -ne 0 ]; then RETVAL=1; echo "failed"; return 1; fi
   echo "stopped PID=$pid"
   RETVAL=0
   return 0;
}

function checkServiceStatus {
   echo -n "Checking for $SERVICE_NAME: "
   if getServicePID; then
	echo "running PID=$pid"
	RETVAL=0
   else
	echo "stopped"
	RETVAL=3
   fi
   return 0;
}

function main {
   RETVAL=0
   case "$1" in
      start)
         startService
         ;;
      stop)
         stopService
         ;;
      restart)
         stopService && startService
         ;;
      status)
         checkServiceStatus
         ;;
      *)
         echo "Usage: $0 {start|stop|restart|status}"
         exit 1
         ;;
      esac
   exit $RETVAL
}

main $1

 

分享到:
评论

相关推荐

    Web服务器和应用程序服务器区别详解

    这些客户端可能包括桌面应用、Web应用或其他应用程序服务器。 应用程序服务器的客户端与之交互的数据不仅仅是简单的HTML标记,而是包含了程序逻辑。例如,对于一个在线商店,应用程序服务器可能接收产品查询,然后...

    Web应用服务器研究综述.docx

    云计算技术的兴起为 Web应用服务器提供了强大的计算、存储和管理能力。虚拟化技术可将物理资源转化为逻辑资源,提高资源利用率。基于云计算和虚拟化技术的 Web 应用服务器可实现动态资源分配、弹性伸缩和高可用性等...

    Web应用安全:Web应用服务器.pptx

    Web应用安全是一个重要的议题,尤其是随着互联网的普及和数字化转型的加速,Web应用已经成为企业和服务提供商的核心组成部分。Web应用服务器是支撑这些应用的关键基础设施,它们不仅处理HTTP协议,还负责处理动态...

    Linux脚本制作 java web项目安装包

    5. **服务自动化管理**: `stop.txt`可能包含了停止Tomcat服务的命令,如`/path/to/tomcat/bin/shutdown.sh`。此外,为了方便管理和监控,可以使用`systemd`服务单元文件创建自启动服务。 6. **权限与安全**: 在...

    自动化部署脚本

    自动化部署是指通过脚本或工具自动完成应用的构建、测试和部署到生产环境的过程。这通常涉及版本控制、构建工具、持续集成/持续部署(CI/CD)系统以及各种配置管理工具。自动化部署可以显著提升团队的生产力,尤其是在...

    注册表脚本编程与应用.PDF

    ASP(Active Server Page,活动服务页面)是微软为IIS服务器开发的一种专用接口,允许开发者使用VBScript或JavaScript编写Web应用程序。它与IIS紧密结合,支持强大的数据库连接功能。 ##### (三)脚本语言与其它...

    服务器脚本.zip

    8. **AJAX(Asynchronous JavaScript and XML)**:虽然不是服务器脚本本身,但AJAX技术允许JavaScript在不刷新整个页面的情况下与服务器交换数据,提升了Web应用的用户体验。 9. **RESTful API**:使用HTTP方法...

    Web应用安全开发规范.doc

    Web应用安全开发规范是针对当前互联网环境中Web应用面临的安全威胁而制定的一套详细的指导原则。随着Web技术的快速发展,黑客攻击手段不断升级,Web安全问题变得尤为重要。许多开发者由于缺乏安全意识,导致开发出的...

    脚本服务器

    这种方式常用于分布式系统中,例如在Web应用中执行服务器端的逻辑操作。 3. **安全性**:由于脚本服务器需要处理用户提交的代码,因此安全是个重要考虑因素。服务器需要有良好的输入验证机制,防止恶意脚本注入攻击...

    shell脚本发布jar包服务,war包服务

    - 如果是Web应用,将WAR文件部署到Tomcat的webapps目录下,或者通过`tomcat.sh`脚本进行部署。 - 使用`service.sh`将应用注册为系统服务,便于管理。 7. **监控和日志**: - 在生产环境中,通常会配置shell脚本...

    超漂亮WEB前台应用

    7. 脚本文件:如构建脚本、测试脚本等,用于自动化工作流程。 8. 配置文件:项目配置,如Webpack配置、Babel配置等。 9. README文件:介绍项目的使用方法和开发指南。 总的来说,“超漂亮WEB前台应用”可能是一个...

    Python-Wooey一个Django应用可以为Python脚本创建web用户界面

    - **结果可视化**:脚本的输出结果可以通过图表、图像或其他形式在 Web 界面上展示,便于用户理解。 **3. 安装与配置** 安装 Wooey 通常涉及以下步骤: 1. 安装 Django 和其他依赖库。 2. 克隆 wooey-Wooey-026a51...

    管理 Web 服务

    IIS支持多种网络协议,如HTTP、HTTPS、FTP、SMTP等,使得企业能够构建和管理复杂的Web应用程序和网站。 【安装与默认设置】 安装IIS通常可以通过Windows的“控制面板”中的“添加/删除程序”进行。默认情况下,IIS...

    Web应用程序结构:原理、协议及实现

    Web应用程序是互联网上的一种软件系统,它允许用户通过Web浏览器进行交互,实现各种功能,如在线购物、社交媒体、数据管理等。深入理解Web应用程序的结构、工作原理和协议对于开发高效、安全的Web应用至关重要。 1....

    Web应用开发技术:JSP(第二版)源代码

    通过学习《Web应用开发技术:JSP(第二版)》,读者可以掌握创建高效、可维护的Web应用所需的技术,包括数据库连接、会话管理、安全控制等方面。提供的源代码能帮助读者更好地理解书中的实例,从而将理论知识转化为...

    linux-各种自动化的AWS脚本

    8. **Elastic Beanstalk**:用于简化部署Web应用程序和微服务的平台。脚本可能包含部署应用到Beanstalk环境的步骤。 9. **监控与报警**:使用CloudWatch监控AWS资源的性能指标,并设置警报。脚本可能涉及配置警报...

    生产环境,线上使用)shell python运维web脚本db 安全脚本.7z

    通过Shell脚本,运维人员可以高效地处理各种任务,如数据库管理、系统安全和Web服务维护。Python脚本则提供了更高级的功能,如数据分析、自动化工具开发和网络通信。这些脚本的使用不仅提高了工作效率,还增强了系统...

    定时启动tomcat应用服务器批处理脚本

    定时启动Tomcat应用服务器批处理脚本是系统管理员常用的一种工具,用于自动化管理Tomcat服务,确保服务在特定时间自动启动,提高运维效率,降低人工干预的需求。下面将详细介绍这个主题及其相关知识点。 一、批处理...

    WEB之困-现代WEB应用安全指南

    《WEB之困-现代WEB应用安全指南》是一本深度探讨现代WEB应用安全问题的专业书籍,旨在帮助开发者和安全专家理解并解决在构建和维护WEB应用过程中可能遇到的安全挑战。本书全面覆盖了WEB应用安全的各个层面,从基础的...

    基于java的docker图形化界面管理WEB应用.zip

    【标题】"基于Java的Docker图形化界面管理WEB应用"揭示了这个项目的核心内容,即使用Java技术来开发一个能够对Docker容器进行图形化管理的Web应用程序。Docker作为一个流行的容器化平台,允许开发者将应用及其依赖...

Global site tag (gtag.js) - Google Analytics