精华内容
下载资源
问答
  • 2021-05-13 18:19:14

    Java程序多数情况下都会用到一些第三方的类库,如果仅用到几个jar文件,写到java命令里就好,但是依赖的jar文件很多的情况,写到java命令里就不好了,而且如果jar文件被替换,名字变了,就需要改java命令,所以最好在启动命令里不出现jar文件名。假设程序依赖的类库jar文件存放在同级的lib目录下,

    简单的:

    java -Djava.ext.dirs=lib -Djava.library.path=lib com.myapp.MyAppClass $*

    这个写法绝大部分情况下都是正确有效的,但是曾经在启动一个用Spring框架写的程序时失败,总报告某些类找不到,实际上都已在lib目录下,原因不明。

    下面换个方法,把依赖的jar文件都加入环境变量CLASSPATH,并且前面还增加了程序是否已启动的检查。

    #!/bin/sh ############## #判断是否程序已启动 jappname='MyAppClass' javaps=`jps` i=0 psid=0 for psresult in $javaps do let cur=i%2 if [ $cur -eq 0 ]; then psid=$psresult else if (test "$psresult" = "$jappname") then echo "程序"$jappname"[pid="$psid"]已经启动!" exit 0 fi fi let i++; done #引入依赖类库到类路径 export CLASSPATH=. pathtmp='' for jarpath in `ls lib/*.jar` do CLASSPATH=$CLASSPATH:$jarpath done export CLASSPATH=$CLASSPATH java -server com.myapp.MyAppClass $*

    附带一个关闭大量Java进程的脚本

    服务器上部署的有JBoss和十几个Java程序,测试时经常需要把这十几个Java程序重启一遍,把Java进程全kill掉的话,JBoss也会被杀掉,但是JBoss不需要重启,一个一个用ps命令找pid,再挨个kill?程序太多,无法忍受。JDK里有个小工具叫jps,可以列出当前的Java进程,利用这个jps写了一个杀掉除指定进程之外的所有Java进程的shell脚本。

    ##################### #!/bin/sh # kill all java applications ##################### javaps=`jps` i=0 psid=0 for psresult in $javaps do let cur=i%2 if [ $cur -eq 0 ]; then psid=$psresult else if (test "$psresult" = "Main" -o "$psresult" = "Jps") then echo $psresult" not to be killed." else echo "kill "$psresult kill $psid fi fi let i++; done

    Main是JBoss的主类名

    引自:http://www.iteye.com/topic/411771

    更多相关内容
  • 虽然写起动shell的频率非常不高。。。但是每次要写都要对付一大...#该脚本Linux启动java程序的通用脚本。即可以作为开机自启动service脚本被调用, #也可以作为启动java程序的独立脚本来使用。 # #Author: tudaxia.
  • then JAVA_JMX_OPTS=" -Dcom.sun.management.jmxremote.port=1099 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false " fi JAVA_MEM_OPTS="" BITS=`file $JAVA_HOME/...

    一、start.sh

    #!/bin/bash

    cd `dirname $0`

    BIN_DIR=`pwd`

    cd ..

    DEPLOY_DIR=`pwd`

    CONF_DIR=$DEPLOY_DIR/conf

    SERVER_NAME=`sed '/server.name/!d;s/.*=//' conf/server.properties | tr -d '\r'`

    SERVER_PORT=`sed '/server.netty.port/!d;s/.*=//' conf/server.properties | tr -d '\r'`

    if [ -z "$SERVER_NAME" ]; then

    SERVER_NAME=`hostname`

    fi

    PIDS=`ps --no-heading -C java -f --width 1000 | grep "$CONF_DIR" |awk '{print $2}'`

    if [ -n "$PIDS" ]; then

    echo "ERROR: The $SERVER_NAME already started!"

    echo "PID: $PIDS"

    exit 1

    fi

    if [ -n "$SERVER_PORT" ]; then

    SERVER_PORT_COUNT=`netstat -tln | grep $SERVER_PORT | wc -l`

    if [ $SERVER_PORT_COUNT -gt 0 ]; then

    echo "ERROR: The $SERVER_NAME port $SERVER_PORT already used!"

    exit 1

    fi

    fi

    LOGS_DIR=""

    LOGS_DIR=$DEPLOY_DIR/logs

    #if [ ! -d $LOGS_DIR ]; then

    # mkdir $LOGS_DIR

    #fi

    STDOUT_FILE=$LOGS_DIR/stdout.log

    LIB_DIR=$DEPLOY_DIR/lib

    LIB_JARS=`find $LIB_DIR|grep .jar|awk '{print $0}'|tr "\n" ":"`

    JAVA_OPTS=" -Djava.awt.headless=true -Djava.net.preferIPv4Stack=true "

    JAVA_DEBUG_OPTS=""

    if [ "$1" = "debug" ]; then

    JAVA_DEBUG_OPTS=" -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n "

    fi

    JAVA_JMX_OPTS=""

    if [ "$1" = "jmx" ]; then

    JAVA_JMX_OPTS=" -Dcom.sun.management.jmxremote.port=1099 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false "

    fi

    JAVA_MEM_OPTS=""

    BITS=`file $JAVA_HOME/bin/java | grep 64-bit`

    if [ -n "$BITS" ]; then

    let memTotal=`cat /proc/meminfo |grep MemTotal|awk '{printf "%d", $2/1024 }'`

    if [ $memTotal -gt 2500 ];then

    JAVA_MEM_OPTS=" -server -Xmx1024m -Xms1024m -Xmn400m -XX:PermSize=128m -Xss256k -XX:+DisableExplicitGC -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:LargePageSizeInBytes=128m -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=70 "

    else

    JAVA_MEM_OPTS=" -server -Xmx1024m -Xms1024m -Xmn400m -XX:PermSize=128m -Xss256k -XX:+DisableExplicitGC -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:LargePageSizeInBytes=128m -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=70 "

    fi

    else

    JAVA_MEM_OPTS=" -server -Xmx1024m -Xms1024m -XX:PermSize=128m -XX:SurvivorRatio=2 -XX:+UseParallelGC "

    fi

    echo -e "Starting the $SERVER_NAME ...\c"

    nohup java $JAVA_OPTS $JAVA_MEM_OPTS $JAVA_DEBUG_OPTS $JAVA_JMX_OPTS -classpath $CONF_DIR:$LIB_JARS com.hzins.framework.server.ServerMain > $STDOUT_FILE 2>&1 &

    COUNT=0

    while [ $COUNT -lt 1 ]; do

    echo -e ".\c"

    sleep 1

    # if [ -n "$SERVER_PORT" ]; then

    # COUNT=`echo status | nc 127.0.0.1 $SERVER_PORT -i 1 | grep -c OK`

    # else

    COUNT=`ps --no-heading -C java -f --width 1000 | grep "$DEPLOY_DIR" | awk '{print $2}' | wc -l`

    # fi

    if [ $COUNT -gt 0 ]; then

    break

    fi

    done

    echo "OK!"

    PIDS=`ps --no-heading -C java -f --width 1000 | grep "$DEPLOY_DIR" | awk '{print $2}'`

    echo "PID: $PIDS"

    #echo "STDOUT: $STDOUT_FILE"

    二、stop.sh

    #!/bin/bash

    cd `dirname $0`

    BIN_DIR=`pwd`

    cd ..

    DEPLOY_DIR=`pwd`

    CONF_DIR=$DEPLOY_DIR/conf

    SERVER_NAME=`sed '/server.name/!d;s/.*=//' conf/server.properties | tr -d '\r'`

    if [ -z "$SERVER_NAME" ]; then

    SERVER_NAME=`hostname`

    fi

    PIDS=`ps --no-heading -C java -f --width 1000 | grep "$CONF_DIR" |awk '{print $2}'`

    if [ -z "$PIDS" ]; then

    echo "ERROR: The $SERVER_NAME does not started!"

    exit 1

    fi

    if [ "$1" != "skip" ]; then

    $BIN_DIR/dump.sh

    fi

    echo -e "Stopping the $SERVER_NAME ...\c"

    for PID in $PIDS ; do

    kill $PID > /dev/null 2>&1

    done

    COUNT=0

    while [ $COUNT -lt 1 ]; do

    echo -e ".\c"

    sleep 1

    COUNT=1

    for PID in $PIDS ; do

    PID_EXIST=`ps --no-heading -p $PID`

    if [ -n "$PID_EXIST" ]; then

    COUNT=0

    break

    fi

    done

    done

    echo "OK!"

    echo "PID: $PIDS"

    三、restart.sh

    #!/bin/bash

    cd `dirname $0`

    ./stop.sh

    ./start.sh

    展开全文
  • shell启动jar程序脚本,可以根据传入的参数"start"、"stop"、"restart"启动当前目录下的jar程序
  • 下面是一个简单的Linux平台的Java程序启动脚本,请将脚本的server_name=“XXXX” 中的XXXX修改为自己对应的jar包名称就可以使用了 支持的功能: 1、启动 2、重启 3、停止 4、查看服务状态 #!/usr/bin/env bash #...

    下面是一个简单的Linux平台的Java程序的启动脚本,请将脚本的server_name=“XXXX” 中的XXXX修改为自己对应的jar包名称就可以使用了,不需要添加后缀名.jar

    支持的功能:
    1、启动
    2、重启
    3、停止
    4、查看服务状态

    #!/usr/bin/env bash
    #jar包名称
    server_name="XXXX"
    
    status() {
      if [[ -n $(ps -ef | grep -v grep | grep ${server_name} | sed -n '1P' | awk '{print $2}') ]]; then
        echo -e "\033[36m ##: 正常运行中~ \033[0m"
      else
        echo -e "\033[31m 已经停止 \033[0m"
      fi
    }
    
    start() {
      if [[ -z $(ps -ef | grep -v grep | grep ${server_name} | sed -n '1P' | awk '{print $2}') ]]; then
        #    停止了
        nohup java -jar ${server_name}'.jar'  >>server.log &
        if [[ -n $(ps -ef | grep -v grep | grep ${server_name} | sed -n '1P' | awk '{print $2}') ]]; then
          echo -e "\033[36m ##: 启动成功~ \033[0m"
        else
          echo -e "\033[31m 启动失败 \033[0m"
        fi
      else
        echo -e "\033[32m ##: 服务已经在运行中... \033[0m"
      fi
    
    }
    
    stop() {
      ps -ef | grep -v grep | grep ${server_name} | sed -n '1P' | awk '{print $2}' | xargs kill -9
      if [[ -z $(ps -ef | grep -v grep | grep ${server_name} | sed -n '1P' | awk '{print $2}') ]]; then
        echo -e "\033[32m ##: 已停止... \033[0m"
      fi
    }
    
    main() {
    
      if [ ! -f ${server_name}".jar" ]; then
        echo -e "\033[31m 当前目录不存在  ${server_name}.jar  文件 \033[0m"
      else
    #    存在文件
        echo -e "\033[42;30m ###[ 控制台 ]### \033[0m"
        echo -e "\033[32m 0. \033[0m 启动服务"
        echo -e "\033[32m 1. \033[0m 停止服务"
        echo -e "\033[32m 2. \033[0m 查看服务状态"
        echo -e "\033[32m 3. \033[0m 重启服务"
    
        read -p "请输入数字0-2的选项,回车确认: " choose
        case $choose in
        0)
          start
          ;;
        1)
          stop
          ;;
        2)
          status
          ;;
        3)
          stop
          start
          ;;
        *)
          echo -e "\033[31m 请输入合法的数字 \033[0m"
          ;;
        esac
      fi
    
    }
    
    main
    
    

    在jar包所在路径,创建一个shell脚本文件,将上面的内容复制到脚本中,脚本中jar的名称记得修改一下

    #创建脚本文件
    vim start.sh
    #授权
    chmod +x ./start.sh
    

    使用效果:
    在这里插入图片描述

    展开全文
  • /bin/sh#该脚本Linux启动java程序的通用脚本。即可以作为开机自启动service脚本被调用,#也可以作为启动java程序的独立脚本来使用。##Author: tudaxia.com, Date: 2011/6/7##警告!!!:该脚本stop部分使用系统...

    #!/bin/sh

    #该脚本为Linux下启动java程序的通用脚本。即可以作为开机自启动service脚本被调用,

    #也可以作为启动java程序的独立脚本来使用。

    #

    #Author: tudaxia.com, Date: 2011/6/7

    #

    #警告!!!:该脚本stop部分使用系统kill命令来强制终止指定的java程序进程。

    #在杀死进程前,未作任何条件检查。在某些情况下,如程序正在进行文件或数据库写操作,

    #可能会造成数据丢失或数据不完整。如果必须要考虑到这类情况,则需要改写此脚本,

    #增加在执行kill命令前的一系列检查。

    #

    #

    ###################################

    #环境变量及程序执行参数

    #需要根据实际环境以及Java程序名称来修改这些参数

    ###################################

    #JDK所在路径

    #JAVA_HOME=/root/JDK/jdk1.6.0_24

    echo $JAVA_HOME

    #执行程序启动所使用的系统用户,考虑到安全,推荐不使用root帐号

    RUNNING_USER=root

    #Java程序所在的目录(classes的上一级目录)

    APP_HOME=/usr/local/NMAgent

    #需要启动的Java主程序(main方法类)

    APP_MAINCLASS=com.eastelsoft.netmanager.agent.Application

    #拼凑完整的classpath参数,包括指定lib目录下所有的jar

    CLASSPATH=$APP_HOME

    for i in "$APP_HOME"/lib/*.*; do

    CLASSPATH="$CLASSPATH":"$i"

    done

    #java虚拟机启动参数

    JAVA_OPTS="-ms512m -mx512m -Xmn256m -Djava.awt.headless=true -XX:MaxPermSize=128m"

    ###################################

    #(函数)判断程序是否已启动

    #

    #说明:

    #使用JDK自带的JPS命令及grep命令组合,准确查找pid

    #jps 加 l 参数,表示显示java的完整包路径

    #使用awk,分割出pid ($1部分),及Java程序名称($2部分)

    ###################################

    #初始化psid变量(全局)

    psid=0

    checkpid() {

    javaps=`$JAVA_HOME/bin/jps -l | grep $APP_MAINCLASS`

    if [ -n "$javaps" ]; then

    psid=`echo $javaps | awk '{print $1}'`

    else

    psid=0

    fi

    }

    ###################################

    #(函数)启动程序

    #

    #说明:

    #1. 首先调用checkpid函数,刷新$psid全局变量

    #2. 如果程序已经启动($psid不等于0),则提示程序已启动

    #3. 如果程序没有被启动,则执行启动命令行

    #4. 启动命令执行后,再次调用checkpid函数

    #5. 如果步骤4的结果能够确认程序的pid,则打印[OK],否则打印[Failed]

    #注意:echo -n 表示打印字符后,不换行

    #注意: "nohup 某命令 >/dev/null 2>&1 &" 的用法

    ###################################

    start() {

    checkpid

    if [ $psid -ne 0 ]; then

    echo "================================"

    echo "warn: $APP_MAINCLASS already started! (pid=$psid)"

    echo "================================"

    else

    echo -n "Starting $APP_MAINCLASS ..."

    JAVA_CMD="nohup $JAVA_HOME/bin/java $JAVA_OPTS -classpath $CLASSPATH $APP_MAINCLASS >/dev/null 2>&1 &"

    su - $RUNNING_USER -c "$JAVA_CMD"

    checkpid

    if [ $psid -ne 0 ]; then

    echo "(pid=$psid) [OK]"

    else

    echo "[Failed]"

    fi

    fi

    }

    ###################################

    #(函数)停止程序

    #

    #说明:

    #1. 首先调用checkpid函数,刷新$psid全局变量

    #2. 如果程序已经启动($psid不等于0),则开始执行停止,否则,提示程序未运行

    #3. 使用kill -9 pid命令进行强制杀死进程

    #4. 执行kill命令行紧接其后,马上查看上一句命令的返回值: $?

    #5. 如果步骤4的结果$?等于0,则打印[OK],否则打印[Failed]

    #6. 为了防止java程序被启动多次,这里增加反复检查进程,反复杀死的处理(递归调用stop)。

    #注意:echo -n 表示打印字符后,不换行

    #注意: 在shell编程中,"$?" 表示上一句命令或者一个函数的返回值

    ###################################

    stop() {

    checkpid

    if [ $psid -ne 0 ]; then

    echo -n "Stopping $APP_MAINCLASS ...(pid=$psid) "

    su - $RUNNING_USER -c "kill -9 $psid"

    if [ $? -eq 0 ]; then

    echo "[OK]"

    else

    echo "[Failed]"

    fi

    checkpid

    if [ $psid -ne 0 ]; then

    stop

    fi

    else

    echo "================================"

    echo "warn: $APP_MAINCLASS is not running"

    echo "================================"

    fi

    }

    ###################################

    #(函数)检查程序运行状态

    #

    #说明:

    #1. 首先调用checkpid函数,刷新$psid全局变量

    #2. 如果程序已经启动($psid不等于0),则提示正在运行并表示出pid

    #3. 否则,提示程序未运行

    ###################################

    status() {

    checkpid

    if [ $psid -ne 0 ]; then

    echo "$APP_MAINCLASS is running! (pid=$psid)"

    else

    echo "$APP_MAINCLASS is not running"

    fi

    }

    ###################################

    #(函数)打印系统环境参数

    ###################################

    info() {

    echo "System Information:"

    echo "****************************"

    echo `head -n 1 /etc/issue`

    echo `uname -a`

    echo

    echo "JAVA_HOME=$JAVA_HOME"

    echo `$JAVA_HOME/bin/java -version`

    echo

    echo "APP_HOME=$APP_HOME"

    echo "APP_MAINCLASS=$APP_MAINCLASS"

    echo "****************************"

    }

    ###################################

    #读取脚本的第一个参数($1),进行判断

    #参数取值范围:{start|stop|restart|status|info}

    #如参数不在指定范围之内,则打印帮助信息

    ###################################

    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

    展开全文
  • Linux启动java程序脚本

    2019-04-16 10:07:45
    linux MongoDB MQTT Mysql Netty nginx OpenJDK Prometheus REST RocketMQ RPC Servlet Sleuth SOA spring boot spring data zookeeper Zuul 域名 微服务 数据结构 日志 ...
  • #该脚本Linux启动java程序的通用脚本。即可以作为开机自启动service脚本被调用, #也可以作为启动java程序的独立脚本来使用。 # #Author: tudaxia.com, Date: 2011/6/7 # #警告!!!:该脚本stop部分使用系统kill...
  • 在项目中有个java工程部署在linux上,需要用shell脚本方法启动。工程结构,如下:bin下面是编译后java的文件,bat下面是一些启动脚本,bat中的lib中放的是该工程所需要的所有jar包。shell脚本内容,如下:大概的步骤...
  • /bin/sh#该脚本Linux启动java程序的通用脚本。即可以作为开机自启动service脚本被调用,#也可以作为启动java程序的独立脚本来使用。##Author: tudaxia.com, Date: 2011/6/7##警告!!!:该脚本stop部分使用系统...
  • /bin/sh#该脚本Linux启动java程序的通用脚本。即可以作为开机自启动service脚本被调用,#也可以作为启动java程序的独立脚本来使用。##Author: tudaxia.com, Date: 2011/6/7##警告!!!:该脚本stop部分使用系统...
  • /bin/sh#该脚本Linux启动java程序的通用脚本。即可以作为开机自启动service脚本被调用,#也可以作为启动java程序的独立脚本来使用。##Author: tudaxia.com, Date: 2011/6/7##警告!!!:该脚本stop部分使用系统...
  • linux 脚本实现java程序启动关闭

    千次阅读 2020-07-14 11:19:50
    echo '脚本执行结束,请等待项目启动' 脚本分为两部分 1、杀死旧的进程 echo 是打印的意思,类似java system.out.print 或者c c++的printf for process in "`ps -ef | grep eurekacluster-0.0.1-test.jar |grep -v ...
  • /bin/sh#该脚本Linux启动java程序的通用脚本。即可以作为开机自启动service脚本被调用,#也可以作为启动java程序的独立脚本来使用。##Author: tudaxia.com, Date: 2011/6/7##警告!!!:该脚本stop部分使用系统...
  • 如果未设置JAVA_HOME环境变量,需要手动指定#JDK所在路径JAVA_HOME=/root/JDK/jdk1.6.0_24RUNNING_USER、APP_HOME、APP_MAINCLASS、CLASSPATH根据自己项目的情况修改即可。.../bin/sh#该脚本Linux启动java程...
  • Linux 下使用Shell脚本启动Java应用

    万次阅读 2018-05-06 19:04:59
    最近项目有需要的关系,就抽出点时间研究了一下 Linux 下使用脚本启动Java应用的方式。很简单,大家作为参考。 这个脚本是在网上找到一个挺好的通用 shell 脚本。只需要修改一些配置变量,就可以用来做起动脚本了...
  • linux启动Java程序和杀死java进程shell脚本
  • 启动、停止、重启、查看状态: ./xxx.sh start ./xxx.sh stop ./xxx.sh restart ./xxx.sh status 以下脚本只需要修改APP_NAME后的jar包,其他代码无需修改: #!/bin/bash #这里可替换为你自己的执行程序,其他代码...
  • 众所周知,Windows和Linux的文件换行回车...在Linux系统中,提供了两个命令进行这种转换:unix2dos,do1、确定哪些类文件是需要做成启动脚本的执行接口,单独拿出来。最好不好package了2、把引用到的文件打成jar包...
  • 脚本文件 process.sh #!/bin/bash #这里可替换为你自己的执行程序,其他代码无需更改 APP_NAME=/home/processes/xxx-0.0.1-SNAPSHOT.jar #使用说明,用来提示输入参数。如:./process.sh restart usage() { echo ...
  • 当开发完一个Java程序后,大多数会部署到Linux上,此时就需要编写脚本来启动Java程序,在网上找寻之后,本人自己编写了一个启动脚本,亲测可用!在此提供启动脚本,对于停止、重启、查询程序进程的脚本,只需对启动...
  • 重启java程序shell脚本

    2020-10-16 09:05:52
    linuxjava项目需要重启一般使用先找到进程杀掉进程,然后找到项目启动,整个过程不算复杂,但是每次都操作一遍太麻烦,我这里把这个过程整理成shell脚本,大家可以修改里面项目名称,每次直接执行这个命令重启项目...
  • #该脚本Linux启动java程序的通用脚本。即可以作为开机自启动service脚本被调用, #也可以作为启动java程序的独立脚本来使用。 # #Author: tudaxia.com, Date: 2011/6/7 # #警告!!!:该脚本stop部分使用系统kill...
  • ps -ef |grep java|grep
  • Java程序启动脚本

    2021-03-24 16:32:23
    Java 程序启动脚本 将tool-other.jar替换为自己的jar名; 使用当前目录下的config.properties作为配置文件; 保存为run.sh 启动 sh run.sh start 关闭 sh run.sh stop #!/bin/bash ### BEGIN INIT INFO # Provides:...
  • java程序linux部署启动停止脚本 1:启动start #!/bin/sh BASE="$(dirname $(readlink -f $0))" #获取当前程序部署目录 APPNAME=$BASE/ LIB_PATH="$BASE/lib" #获取lib目录 CONF=$BASE/conf #获取conf配置文件...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 100,732
精华内容 40,292
关键字:

linux启动java程序脚本

java 订阅