`

linux下通用的java程序启动关闭重启脚本

阅读更多

纯手写,只需要修改一些配置变量,就可以用来做起动脚本了。

并且除了能起动、还支持关闭、重启、查看是否正在运行的功能。

给大家演示一下效果:



 

 

 

#!/bin/bash
# MAINTAINER gaoyaohua "gaoyh@tingyun.com" www.updn.cn 
# tingyun service

APPNAME=dc-backend-server
CONF=spring-config-server.xml
APPDIR=$(dirname $(cd `dirname $0`; pwd))
TINGYUNDIR=$(dirname ${APPDIR})
JAVA_HOME=${TINGYUNDIR}/java
LIB=${APPDIR}/target/lib
CLASSPATH=${APPDIR}/target/conf
PROPS_FILE=${APPDIR}/conf/conf-deploy.properties
PROPS_ENCODING=UTF-8
LOGDIR=${APPDIR}/logs
APPPID=${APPDIR}/run/${APPNAME}.pid
LOCKFILE=${APPDIR}/lock/$APPNAME
SHUTDOWN_WAIT=1

# java options
JAVA_OPTS="-Xmx2048M -Xms512M -Xmn256M -XX:SurvivorRatio=1 -Xss256k -XX:PermSize=32M -XX:MaxPermSize=72M -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:CMSFullGCsBeforeCompaction=0 -XX:+CMSClassUnloadingEnabled -XX:LargePageSizeInBytes=128M -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=80 -XX:SoftRefLRUPolicyMSPerMB=0 -XX:+PrintClassHistogram  -verbose:gc -XX:+PrintGCDetails  -XX:+PrintGCTimeStamps  -XX:-HeapDumpOnOutOfMemoryError -Xloggc:"$LOGDIR"/$APPNAME-gc.log -XX:HeapDumpPath="$LOGDIR"/$APPNAME-dump"

# jmxremote options 默认注释为关掉
#JMX_OPTS=-Dcom.sun.management.jmxremote.port=10004 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false

# enter main class start
ENTER="com.networkbench.newlens.datacollector.Bootstrap"


if [ -d "$LIB" ]; then
    for i in "$LIB"/*.jar; do
      CLASSPATH="$CLASSPATH":"$i"
    done
fi


start() {
	kpid="`ps x | grep "DappName=$APPNAME" | grep -v grep | awk '{print $1}'`"
	if [ -n "$kpid" ] && [ -f $LOCKFILE ] && [ -f $APPPID ];then
		read kpid < $APPPID
		echo -e "$APPNAME is \033[32m running \033[0m"
		return 0
	fi

	echo -n "$APPNAME start  " && echo -ne "\033[s ."
	nohup $JAVA_HOME/bin/java -DappName="$APPNAME" $JAVA_OPTS -Dtingyunpath="$APPDIR" -Dsharedpath="$TINGYUNDIR/shared" -Dwork.dir="$APPDIR" -Dconf=$CONF -Dprops=$PROPS_FILE -DpropsEncoding=$PROPS_ENCODING -Dnohup=true -Dpid=$$ -Dpid.file=$APPPID -DdiagnoseOnSignal=ALRM  $JMX_OPTS -cp $CLASSPATH  $ENTER >> "$LOGDIR"/nohup_"$APPNAME" 2>&1 &
	RETVAL=$? && [ $RETVAL = 0 ] && touch $LOCKFILE && echo -e "\033[u\033[K [  \033[32m ok \033[0m  ]"
    	echo `date "+%F %T"` $APPNAME started. >> "$LOGDIR"/$APPNAME-restart.log
    	return $RETVAL
}


stop() {
	kpid="`ps x | grep "DappName=$APPNAME" | grep -v grep | awk '{print $1}'`"
	#if [ ! -n "$kpid" ] && [ ! -f $LOCKFILE ] && [ ! -f $APPID ];then
	if [ ! -n "$kpid" ];then
		echo -e "$APPNAME is \033[31m not running \033[0m"
		return 1
	fi
	count=-1
	if [ -f $LOCKFILE ] && [ -f $APPID ]; then
		read kpid < $APPPID
		echo -n -e "$APPNAME stop   " && echo -n -e "\033[s";
		kill $kpid
            	read kpid < $APPPID
		count=0;
            	let kwait=$SHUTDOWN_WAIT
            	until [ `ps --pid $kpid | grep -c $kpid` = '0' ] || [ $count -gt $kwait ]
            	do
                	echo -n -e ".";
                	sleep 1
                	let count=$count+1;
            	done
	fi
        if [ $count -gt $kwait ] && [ "$count" -eq "-1" ];then
        	echo -e "\033[u\033[K [\033[31m failed \033[0m]"
		return -1
		#kill -9 $kpid
        fi
        if [ $count -le $kwait ]; then
        	echo -e "\033[u\033[K [  \033[32m ok \033[0m  ]"
        fi
    	rm -f $LOCKFILE $APPPID
}

status() {
	kpid="`ps x | grep "DappName=$APPNAME" | grep -v grep | awk '{print $1}'`"
	if [ -n "$kpid" ];then
		if [ -f $LOCKFILE ] && [ -f $APPID ];then
			echo -e "$APPNAME is \033[32m running \033[0m"
		else
			echo -e "$APPNAME is \033[33m running \033[0m but lockfile or pidfile not ready"
		fi
	else
		echo -e "$APPNAME is \033[31m not running \033[0m"
	fi
}

info() {
	echo $APPNAME
}



case "$1" in
	'start')
		start
		;;
	'stop')
		stop
		;;
	'restart')
		stop
		start
		;;
	'status')
		status
		;;
	'info')
		info
		;;
	*)
		echo "Usage: $0 {start|stop|restart|status|info}" 
		exit 1
		;;
esac
exit 0

 

  • 大小: 43.8 KB
3
0
分享到:
评论

相关推荐

    Linux通用java程序启动脚本代码实例

    【Linux通用Java程序启动脚本】是用于在Linux操作系统中便捷地启动、停止、重启以及检查Java应用程序状态的脚本。这种脚本通常采用bash语言编写,能够灵活适应不同的Java项目,只需调整其中的配置变量即可。以下是...

    linux 一键启动 jar包 批处理脚本

    在Linux系统中,Java开发者经常需要管理Spring Boot应用程序,包括启动、停止和重启等操作。为了简化这个过程,我们可以创建一个批处理脚本,通常是一个`.sh`文件,来实现一键执行这些任务。本文将详细讲解如何编写...

    jar包在服务器启动的通用命令构建脚本.zip

    在IT行业中,jar包是Java应用程序的标准打包格式,它包含了运行Java程序所需的所有类和资源。Spring Boot是一个流行的框架,用于简化Spring应用的创建和部署,而Maven是Java项目管理工具,帮助开发者管理和构建项目...

    JAVA上百实例源码以及开源项目源代码

    Java编写的山寨QQ,多人聊天+用户在线,程序分服务端和客户端,典型C/S结构, 当用户发送第一次请求的时候,验证用户登录,创建一个该qq号和服务器端保持通讯连接得线程,启动该通讯线程,通讯完毕,关闭Scoket。...

    mysql在linux64位下安装步骤完整版.pdf

    在Linux 64位系统上安装...对于Java开发人员来说,了解如何在Linux环境下安装和配置MySQL数据库非常重要,因为很多Java应用程序都使用MySQL作为后端存储。熟悉这些步骤将有助于在开发和部署环境中快速设置数据库服务。

    linux环境部署(nginx).pdf

    在Linux环境下部署应用程序,尤其是Web服务,通常涉及多个步骤。在这个场景中,我们主要关注的是如何在Linux系统上安装和配置Nginx服务器。然而,提供的内容实际上描述了部署Tomcat的过程,而没有直接涉及Nginx。...

    Vi下etc下profile直接看安装目录.docx

    保存并关闭文件后,运行`source /etc/profile`使改动立即生效,或者重启系统。 除了`PATH`,还有其他常用的环境变量: 1. `HOME`:用户的主目录,通常为`/home/username`。 2. `USER`:当前登录的用户名。 3. `...

    最新TOMCAT

    - **启动与停止**:在Windows上,可以通过`bin`目录下的`startup.bat`和`shutdown.bat`脚本来启动和关闭Tomcat;在Linux上,使用对应的`sh`文件。 - **配置文件**:`server.xml`是Tomcat的主要配置文件,定义了...

    tomcat7资源包

    3. **目录结构**:Tomcat的目录结构清晰,如`conf`目录存储配置文件,`webapps`存放Web应用,`logs`记录日志,`temp`存储临时文件,`bin`包含启动和关闭脚本等。 4. **安全性**:Tomcat支持多种安全机制,如SSL/TLS...

    tomcat安装及配置教程

    - 使用`systemctl`命令启动、停止或重启Tomcat服务。 #### 五、访问Tomcat - 在浏览器中输入`http://localhost:8080`(默认端口)来访问Tomcat的欢迎页面。 - 如果您部署了应用程序,可以通过`...

    海思3521a芯片uboot nand芯片U盘自动更新系统

    配合uboot(通用引导加载程序)和nand芯片,可以构建一个稳定可靠的系统更新框架。 uboot是嵌入式设备上常见的引导加载程序,它在系统启动时执行,负责初始化硬件环境,加载操作系统内核,并将控制权交给内核。在...

    redis 完整版教程(公司内部请某培训机构的教程)

    ##### Linux环境下安装 - **通用步骤**: - 下载Redis源码包。 - 解压并进入目录。 - 编译安装。 - 启动服务端(`./redis-server` 或 `./redis-server ../redis.conf`)。 - 启动客户端(`./redis-cli`)进行...

    XAMPP安装包.rar

    4. **Perl**:Perl是一种通用的、解释型的、动态的编程语言,XAMPP提供Perl支持,尽管在现代Web开发中Perl的使用不如以前普遍,但它在某些场景下仍然有价值。 5. **安装过程**:"xamppinstaller.exe"是XAMPP的安装...

    robotframework-appiumlibrary-1.4.2.tar.gz

    Robot Framework是一个通用的自动化框架,支持关键字驱动测试方法,而AppiumLibrary则是其扩展,用于对接Appium,实现对iOS和Android应用程序的自动化测试。 在"robotframework-appiumlibrary-1.4.2.tar.gz"这个...

    opscuserguide52

    - **启动、停止和重启**:介绍如何控制OpsCenter服务的生命周期。 - **升级OpsCenter**:指导用户如何从旧版本平滑过渡到新版本。 #### 配置 OpsCenter提供了丰富的配置选项,以满足不同场景的需求: - **安全性*...

    parasoft jtest 9.4 安装文件以及破解 eclipse插件

    1. **启动安装程序**:双击下载好的安装文件,启动安装向导。 2. **接受许可协议**:阅读并同意软件许可协议。 3. **选择安装路径**:自定义安装路径,避免使用默认路径可能导致权限问题。 4. **选择组件**:勾选...

    WIN10配置Python开发环境

    - 为了确保与Linux系统的兼容性,建议不要选择最新版本的Python(尽管安装过程对所有版本都是通用的),而是选择较新但非最新的版本,例如Python 3.7或3.8等。 2. **安装Python**: - 双击下载好的安装包进行安装...

Global site tag (gtag.js) - Google Analytics