-
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
更多相关内容 -
Linux通用java程序启动脚本代码实例
2021-01-09 02:52:15虽然写起动shell的频率非常不高。。。但是每次要写都要对付一大...#该脚本为Linux下启动java程序的通用脚本。即可以作为开机自启动service脚本被调用, #也可以作为启动java程序的独立脚本来使用。 # #Author: tudaxia. -
linux下启动java程序的通用脚本介绍
2021-03-03 16:32:31then 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启动java程序(jar)的脚本
2020-08-06 11:12:13shell启动jar程序的脚本,可以根据传入的参数"start"、"stop"、"restart"启动当前目录下的jar程序。 -
简单的Linux平台的Java程序启动脚本
2020-12-08 12:07:19下面是一个简单的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
使用效果:
-
在Linux下启动Java服务的脚本
2021-02-26 14:35:40/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:45linux MongoDB MQTT Mysql Netty nginx OpenJDK Prometheus REST RocketMQ RPC Servlet Sleuth SOA spring boot spring data zookeeper Zuul 域名 微服务 数据结构 日志 ... -
Linux下JAVA程序启动脚本(实例)
2020-02-15 14:37:22#该脚本为Linux下启动java程序的通用脚本。即可以作为开机自启动service脚本被调用, #也可以作为启动java程序的独立脚本来使用。 # #Author: tudaxia.com, Date: 2011/6/7 # #警告!!!:该脚本stop部分使用系统kill... -
linux shell脚本启动java程序(图解)
2021-02-12 15:04:56在项目中有个java工程部署在linux上,需要用shell脚本方法启动。工程结构,如下:bin下面是编译后java的文件,bat下面是一些启动脚本,bat中的lib中放的是该工程所需要的所有jar包。shell脚本内容,如下:大概的步骤... -
linux下通用的java程序启动脚本
2021-02-26 09:59:53/bin/sh#该脚本为Linux下启动java程序的通用脚本。即可以作为开机自启动service脚本被调用,#也可以作为启动java程序的独立脚本来使用。##Author: tudaxia.com, Date: 2011/6/7##警告!!!:该脚本stop部分使用系统... -
不错的linux下通用的java程序启动脚本(转载)
2021-02-28 07:07:45/bin/sh#该脚本为Linux下启动java程序的通用脚本。即可以作为开机自启动service脚本被调用,#也可以作为启动java程序的独立脚本来使用。##Author: tudaxia.com, Date: 2011/6/7##警告!!!:该脚本stop部分使用系统... -
【Shell】 Linux下启动java程序的通用脚本sh
2021-02-27 12:13:38/bin/sh#该脚本为Linux下启动java程序的通用脚本。即可以作为开机自启动service脚本被调用,#也可以作为启动java程序的独立脚本来使用。##Author: tudaxia.com, Date: 2011/6/7##警告!!!:该脚本stop部分使用系统... -
linux 脚本实现java程序启动关闭
2020-07-14 11:19:50echo '脚本执行结束,请等待项目启动' 脚本分为两部分 1、杀死旧的进程 echo 是打印的意思,类似java system.out.print 或者c c++的printf for process in "`ps -ef | grep eurekacluster-0.0.1-test.jar |grep -v ... -
不错的linux下通用的java程序启动脚本
2021-03-03 16:07:54/bin/sh#该脚本为Linux下启动java程序的通用脚本。即可以作为开机自启动service脚本被调用,#也可以作为启动java程序的独立脚本来使用。##Author: tudaxia.com, Date: 2011/6/7##警告!!!:该脚本stop部分使用系统... -
Linux下启动java程序的通用脚本sh(可用作开机启动service脚本)
2021-05-12 16:38:02如果未设置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脚本
2021-12-29 10:50:58linux下启动Java程序和杀死java进程shell脚本 -
Linux系统Java程序启动/停止/重启shell脚本
2021-11-19 10:00:39启动、停止、重启、查看状态: ./xxx.sh start ./xxx.sh stop ./xxx.sh restart ./xxx.sh status 以下脚本只需要修改APP_NAME后的jar包,其他代码无需修改: #!/bin/bash #这里可替换为你自己的执行程序,其他代码... -
Java程序启动脚本(windows下的bat和linux下的sh)
2021-02-27 09:33:55众所周知,Windows和Linux的文件换行回车...在Linux系统中,提供了两个命令进行这种转换:unix2dos,do1、确定哪些类文件是需要做成启动脚本的执行接口,单独拿出来。最好不好package了2、把引用到的文件打成jar包... -
linux系统java jar文件脚本启动
2021-08-18 13:59:32脚本文件 process.sh #!/bin/bash #这里可替换为你自己的执行程序,其他代码无需更改 APP_NAME=/home/processes/xxx-0.0.1-SNAPSHOT.jar #使用说明,用来提示输入参数。如:./process.sh restart usage() { echo ... -
Linux下启动Java程序的启动脚本编写
2017-06-21 11:35:27当开发完一个Java程序后,大多数会部署到Linux上,此时就需要编写脚本来启动Java程序,在网上找寻之后,本人自己编写了一个启动脚本,亲测可用!在此提供启动脚本,对于停止、重启、查询程序进程的脚本,只需对启动... -
重启java程序shell脚本
2020-10-16 09:05:52linux中java项目需要重启一般使用先找到进程杀掉进程,然后找到项目启动,整个过程不算复杂,但是每次都操作一遍太麻烦,我这里把这个过程整理成shell脚本,大家可以修改里面项目名称,每次直接执行这个命令重启项目... -
Linux下java程序启动脚本(可做开机自启动Service脚本)
2018-12-02 14:00:00#该脚本为Linux下启动java程序的通用脚本。即可以作为开机自启动service脚本被调用, #也可以作为启动java程序的独立脚本来使用。 # #Author: tudaxia.com, Date: 2011/6/7 # #警告!!!:该脚本stop部分使用系统kill... -
linux的shell命令检测某个java程序是否执行
2020-09-02 11:15:22ps -ef |grep java|grep -
Java程序启动脚本
2021-03-24 16:32:23Java 程序启动脚本 将tool-other.jar替换为自己的jar名; 使用当前目录下的config.properties作为配置文件; 保存为run.sh 启动 sh run.sh start 关闭 sh run.sh stop #!/bin/bash ### BEGIN INIT INFO # Provides:... -
linux部署java程序启动停止脚本
2021-04-14 20:52:54java程序linux部署启动停止脚本 1:启动start #!/bin/sh BASE="$(dirname $(readlink -f $0))" #获取当前程序部署目录 APPNAME=$BASE/ LIB_PATH="$BASE/lib" #获取lib目录 CONF=$BASE/conf #获取conf配置文件...