Java 启动脚本

前置条件

  • 安装JDK环境

Linux

1、编写Shell脚本(run)

#!/bin/bash  
  
error_exit() {  
  echo -e "\033[31;1m ERROR: $1 !! \033[0m"  exit 1  
}  
  
CMD=$(basename $0)  
ACTION=$1  
FILENAME=$2  
PROFILES=$3  
  
case $ACTION in  
start) ;;  
stop) ;;  
status) ;;  
restart) ;;  
*)  
  error_exit "Usage: $CMD start|stop|status|restart"  ;;  
esac  
  
if [ -z $FILENAME ]; then  
  error_exit "Usage: $CMD $ACTION 'FileName', Please pass in the path of the jar file"else  
  if [ ! -f $FILENAME ]; then  
    error_exit "$FILENAME Jar file not found, Please pass in the correct jar file path"  fi  
fi  
  
if [ "$PROFILES" = "" ]; then  
  PROFILES="prod"  
fi  
  
BASE_DIR=$(dirname $FILENAME)  
  
if [ "$BASE_DIR" == "." ]; then  
  BASE_DIR=$(pwd)  
fi  
  
if [ ! -d "${BASE_DIR}/logs" ]; then  
  mkdir ${BASE_DIR}/logs  
fi  
  
SERVER=$(basename $FILENAME .jar)  
  
PID=$(ps -ef | grep java | grep ${SERVER}.jar | grep -v grep | awk '{print $2}')  
  
start() {  
  if ! kill -0 ${PID} 2>/dev/null; then  
    [ ! -e "$JAVA_HOME/bin/java" ] && JAVA_HOME=$HOME/jdk/java  
    [ ! -e "$JAVA_HOME/bin/java" ] && JAVA_HOME=/usr/local/jdk  
    [ ! -e "$JAVA_HOME/bin/java" ] && JAVA_HOME=/usr/local/java/jdk  
    [ ! -e "$JAVA_HOME/bin/java" ] && unset JAVA_HOME  
  
    if [ -z "$JAVA_HOME" ]; then  
      JAVA_PATH=$(dirname $(readlink -f $(which javac)))  
      if [ "x$JAVA_PATH" != "x" ]; then  
        export JAVA_HOME=$(dirname $JAVA_PATH 2>/dev/null)  
      fi  
      if [ -z "$JAVA_HOME" ]; then  
        error_exit "Please set the JAVA_HOME variable in your environment, We need java(x64)! jdk8 or later is better!"  
      fi  
    fi  
    export JAVA_HOME  
    export JAVA="$JAVA_HOME/bin/java"  
    #===========================================================================================  
    # JVM Configuration    #===========================================================================================    JAVA_OPT="${JAVA_OPT} -server -Xms512m -Xmx512m -Xmn256m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m"    JAVA_OPT="${JAVA_OPT} -XX:-OmitStackTraceInFastThrow -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=${BASE_DIR}/logs/java_heapdump.hprof"  
    JAVA_OPT="${JAVA_OPT} -XX:-UseLargePages -Dspring.profiles.active=$PROFILES"  
  
    #JAVA_MAJOR_VERSION=$($JAVA -version 2>&1 | sed -E -n 's/.* version "([0-9]*).*$/\1/p')  
    #if [[ "$JAVA_MAJOR_VERSION" -ge "9" ]] ; then    #  JAVA_OPT="${JAVA_OPT} -Xlog:gc*:file=${BASE_DIR}/logs/nacos_gc.log:time,tags:filecount=10,filesize=102400"    #else    #  JAVA_OPT="${JAVA_OPT} -Djava.ext.dirs=${JAVA_HOME}/jre/lib/ext:${JAVA_HOME}/lib/ext"    #  JAVA_OPT="${JAVA_OPT} -Xloggc:${BASE_DIR}/logs/nacos_gc.log -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=100M"    #fi  
    JAVA_OPT="${JAVA_OPT} -jar ${BASE_DIR}/${SERVER}.jar"  
    echo $JAVA_OPT  
  
    #自定义外部配置文件启动  
    #export CUSTOM_CONFIG_LOCATIONS=file:${BASE_DIR}/application.yml  
    #JAVA_OPT="${JAVA_OPT} --spring.config.location=${CUSTOM_CONFIG_LOCATIONS}"  
    #echo "$JAVA ${JAVA_OPT} $SERVER"  
    # start    #nohup $JAVA ${JAVA_OPT} grape.service >/dev/null 2>&1 &    nohup $JAVA ${JAVA_OPT} $SERVER >${BASE_DIR}/logs/console.log 2>&1 &  
    echo -e "\033[32;1m Start '$SERVER' server success \033[0m"  
  else  
    echo -e "\033[31;1m Failed to start '${SERVER}' server, Because it is running (pid:${PID}). \033[0m"  
  fi  
}  
  
stop() {  
  if kill -0 ${PID} 2>/dev/null; then  
    kill ${PID}  
    echo -e "\033[33;1m Killed ${SERVER} server \033[0m"  else  
    echo -e "\033[31;1m Failed to stop ${SERVER} server, It is not running. \033[0m"  fi  
}  
  
status() {  
  if kill -0 ${PID} 2>/dev/null; then  
    echo -e "\033[32;1m ${SERVER} server (pid:${PID}) is running. \033[0m"  
  else  
    echo -e "\033[31;1m ${SERVER} server is not running. \033[0m"  fi  
}  
  
function restart() {  
  stop  
  sleep 2  
  start  
}  
  
case $ACTION in  
start)  
  start  
  ;;  
stop)  
  stop  
  ;;  
status)  
  status  
  ;;  
restart)  
  restart  
  ;;  
*)  
  error_exit "Usage: $CMD start|stop|status|restart"  ;;  
esac

2、修改脚本权限

chmod u+x run

3、设置全局脚本

mv ./run /usr/bin

Windows

1、编写CMD命令

@echo off  
  
if not exist "%JAVA_HOME%\bin\java.exe" echo Please set the JAVA_HOME variable in your environment, We need java(x64)! jdk8 or later is better! & EXIT /B 1  
set "JAVA=%JAVA_HOME%\bin\java.exe"  
  
set FILENAME=%1  
  
if "%FILENAME%"=="" echo Usage: %0 'FileName', Please pass in the path of the jar file & EXIT /B 1  
  
IF NOT EXIST %FILENAME% echo %FILENAME% Jar file not found, Please pass in the correct jar file path & EXIT /B 1  
  
set SERVER=%~n1  
  
set BASE_DIR=%~dp0  
  
set "JAVA_OPT=-server -Xms512m -Xmx1024m -Xmn256m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m"  
set "JAVA_OPT=%JAVA_OPT% -XX:-OmitStackTraceInFastThrow -XX:HeapDumpPath=%BASE_DIR%java_heapdump.hprof"  
set "JAVA_OPT=%JAVA_OPT% -XX:-UseLargePages -Dspring.profiles.active=prod"  
set "JAVA_OPT=%JAVA_OPT% -jar %BASE_DIR%%FILENAME%"  
  
rem call "%JAVA%" %JAVA_OPT% %SERVER% %*echo "%JAVA%" %JAVA_OPT% %SERVER%  
START "%SERVER%" %JAVA% %JAVA_OPT% %SERVER%
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在 Jenkins 中使用 "Publish over SSH" 插件来部署 Java 应用可以使用下列脚本: ``` #! /bin/bash # 从 Jenkins 构建参数中获取相关信息 JENKINS_BUILD_ID=$1 JENKINS_BUILD_NUMBER=$2 JENKINS_JOB_NAME=$3 JENKINS_BUILD_TAG=$4 # 连接到目标服务器并执行相应命令 ssh user@example.com << EOF # 在远程服务器上创建文件夹 mkdir -p /opt/jenkins/$JENKINS_JOB_NAME/$JENKINS_BUILD_NUMBER # 从 Jenkins 服务器上下载文件 scp jenkins@jenkins.example.com:/opt/jenkins/$JENKINS_JOB_NAME/workspace/$JENKINS_JOB_NAME/*.jar /opt/jenkins/$JENKINS_JOB_NAME/$JENKINS_BUILD_NUMBER # 停止应用 systemctl stop myapp.service # 备份当前应用 mv /opt/myapp /opt/myapp.bak # 将新应用文件移动到目标位置 mv /opt/jenkins/$JENKINS_JOB_NAME/$JENKINS_BUILD_NUMBER /opt/myapp # 启动应用 systemctl start myapp.service EOF ``` 在上面的脚本中,我们使用 Jenkins 的构建参数来获取构建信息,然后连接到目标服务器并使用 scp 命令从 Jenkins 服务器上下载文件。接下来,我们停止旧版应用,将新版应用移动到目标位置,并启动新版应用。 ### 回答2: Jenkins是一个开源的持续集成工具,用于自动化构建、测试和部署软件项目。Publish over SSH是Jenkins的一个插件,用于将构建的项目文件通过SSH协议发布到远程服务器上。 在Jenkins中使用Publish over SSH插件执行Java启动脚本时,首先需要在Jenkins管理界面中安装和配置该插件。配置步骤大致如下: 1. 在Jenkins管理界面选择“系统设置”。 2. 在页面下方找到“Publish over SSH”插件的配置区域。 3. 点击“Add”按钮添加一个SSH服务器配置。 4. 在配置页面中填写远程服务器的连接信息,包括主机名、SSH端口号、用户名和密码等。还可以选择“Advanced”选项以配置其他高级设置,如使用私钥登录等。 5. 点击“Test Configuration”按钮进行连接测试,确保连接配置正确无误。 6. 保存配置并返回到Jenkins主页。 接下来,我们可以在Jenkins的构建项目中使用Publish over SSH插件启动Java脚本。具体步骤如下: 1. 打开需要使用SSH插件的Jenkins构建项目。 2. 在“构建环境”中勾选“Send files or execute commands over SSH after the build runs”选项。 3. 在“SSH Server”一栏选择之前配置好的SSH服务器配置。 4. 在“Transfers”一栏中可以设置要传输的文件和目标目录。 5. 在“Exec Command”一栏中填写要执行的Java启动脚本命令。 6. 保存并触发构建。 当Jenkins执行该项目时,它将会使用SSH协议将构建产物和Java启动脚本传输到远程服务器上,并且在远程服务器上通过SSH执行该脚本。 通过使用Jenkins的Publish over SSH插件和Java启动脚本,我们可以方便地实现自动化部署和执行远程命令,从而简化软件项目的部署和管理过程。同时,该插件还支持其他高级功能和设置,如跳过主机密钥验证、使用跳板机访问远程服务器等,以满足不同场景下的需求。 ### 回答3: 用Jenkins的Publish Over SSH插件,可以通过SSH连接到远程服务器,并执行一个Java启动脚本。 首先,确保在Jenkins服务器上安装了Publish Over SSH插件,并在插件管理中启用它。 然后,打开Jenkins的配置页面,在"系统设置"部分找到"Publish over SSH"配置项。点击"Add"按钮,配置SSH服务器的连接信息,包括远程服务器的IP地址、SSH端口号、用户名和密码。 接下来,在Jenkins任务中,配置构建步骤。选择"Execute shell script on remote host using ssh"选项,并输入要执行的Java启动脚本的命令,例如: ``` java -jar /path/to/your/java/jar/file.jar ``` 保存并触发构建,Jenkins将通过SSH连接到远程服务器,并执行Java启动脚本。通过Publish Over SSH插件,你可以轻松地将构建输出发布到远程服务器。 这种方法非常适用于需要在远程服务器上执行Java应用程序的场景,例如部署到生产环境或测试环境中。同时,Jenkins的发布和部署过程也能够自动化,并进行可靠的版本管理和回滚操作,极大地提高了开发和运维的效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值