linux下java启动脚本+maven配置

3 篇文章 0 订阅

首先贴出shell代码来

#!/bin/sh

#BASH_SOURCE为获取执行指令
MAIN_HOME="${BASH_SOURCE-$0}"
MAIN_HOME="$(dirname "${MAIN_HOME}")"
MAIN_HOME="$(cd "${MAIN_HOME}"; pwd)"

echo $MAIN_HOME

if [ "$JAVA_HOME" != "" ];
  then
  JAVA="$JAVA_HOME/bin/java"
else
  JAVA=java
fi

#在本路径的上级目录下创建日志目录和保存进程号的目录
mkdir -p $MAIN_HOME/../logs
mkdir -p $MAIN_HOME/../pid

#lib下的所有jar都加入到classpathfor i in "$MAIN_HOME"/../lib/*.jar
do
    echo $i
    CLASSPATH="$i:$CLASSPATH"
done

#启动类的包名
MAIN="com.test.Startup"
DAEMON_OUT="$MAIN_HOME/../logs/main.out"
PID_FILE="$MAIN_HOME/../pid/main.pid"
CONF_PATH="$MAIN_HOME/../conf"
echo $DAEMON_OUT
echo $MAIN
echo $PID_FILE

case $1 in
start)

    JVMFLAGS="
    -Dfile.encoding=UTF-8
    -Dspring.profiles.active=$2
    -Xss512k
    -Xmx2048M
    -Xms2048M
    -Xmn512M
    -XX:PermSize=192M
    -XX:MaxPermSize=192M
    -XX:+UseConcMarkSweepGC
    -XX:+UseParNewGC
    -XX:+CMSClassUnloadingEnabled
    -XX:+CMSParallelRemarkEnabled
    -XX:+UseCMSCompactAtFullCollection
    -Xverify:none
    -Xnoclassgc"

#-XX:+CMSPermGenSweepingEnabled代替参数CMSClassUnloadingEnabled
    echo "$JVMFLAGS"
    echo "Starting main... "
    if [ -f "$PID_FILE" ];
    then
      if kill -0 `cat "$PID_FILE"` > /dev/null 2>&1;
      then
         echo $command already running as process `cat "$PID_FILE"`.
         exit 0
      fi
    fi
    nohup "$JAVA" -cp "$CONF_PATH":"$CLASSPATH" $JVMFLAGS $MAIN > "$DAEMON_OUT" 2>&1 < /dev/null &

    if [ $? -eq 0 ]
    then
      if /bin/echo -n $! > "$PID_FILE"
      then
        sleep 1
        echo "STARTED"
      else
        echo "FAILED TO WRITE PID"
        exit 1
      fi
    else
      echo "main DID NOT START"
      exit 1
    fi
;;
restart)
    sh $0 stop $2
    sleep 3
    sh $0 start $2
;;
stop)
    echo "Stopping main... "
    if [ ! -f "$PID_FILE" ]
    then
      echo "no api to started (could not find file $PID_FILE)"
    else
      kill -9 $(cat "$PID_FILE")
      rm "$PID_FILE"
      echo "STOPPED"
    fi
    exit 0
;;
*)
    echo "Usage: $0 {start|stop|restart} {test|onlineTest|online}" >&2
esac

先来两个简单java启动脚本写法理解一下:

第一种写法:java -cp TEST.jar -Dfile.encoding=gbk com.test.Startup CKIFPD.cfg
JVM理解成了执行一个class,即java [-options] class [args...],所以com.test.Startup后面的被当成了args;
 
第二种写法:java -jar TEST.jar -Dfile.encoding=gbk com.test.Startup CKIFPD.cfg
JVM理解成了执行一个jar,即java [-options] -jar jarfile [args...],所以-jar TEST.jar后面的都被当成了args。

我的shell脚本用的是第一种,其中难点是nohup和输入输出重定向那里,重定向的可以看下我的这篇文章linux输入输出重定向,还有添加了jvm优化的参数,优化参数可以参考我另外的一片调优参数的文章jvm参数

再来看看maven的pom设置

<build>
   <finalName>test</finalName>
   <plugins>
      <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-deploy-plugin</artifactId>
         <version>2.7</version>
         <configuration>
            <skip>true</skip>
         </configuration>
      </plugin>
      <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-assembly-plugin</artifactId>
         <version>2.5.3</version>
         <executions>
            <execution>
               <id>make-zip</id>
               <phase>package</phase>
               <goals>
                  <goal>single</goal>
               </goals>
               <configuration>
                  <finalName>test</finalName>
                  <descriptors>
                     <descriptor>release.xml</descriptor>
                  </descriptors>
               </configuration>
            </execution>
         </executions>
      </plugin>
   </plugins>
</build>

release.xml配置

<?xml version="1.0" encoding="UTF-8"?>
<assembly>
    <id>main</id>
    <baseDirectory>test</baseDirectory>
    <formats>
        <format>zip</format>
    </formats>
    <fileSets>
        <fileSet>
            <directory>${project.basedir}/src/main/resources/bin</directory>
            <outputDirectory>bin</outputDirectory>
        </fileSet>
        <fileSet>
            <directory>${project.basedir}/src/main/resources</directory>
            <outputDirectory>conf</outputDirectory>
            <excludes>
                <exclude>bin/</exclude>
            </excludes>
        </fileSet>
    </fileSets>

    <dependencySets>
        <dependencySet>
            <useProjectArtifact>true</useProjectArtifact>
            <outputDirectory>lib</outputDirectory>
        </dependencySet>
    </dependencySets>
</assembly>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值