shell 启动、停止、重启java程序

23 篇文章 0 订阅
  1. #!/bin/sh   
  2.   
  3. SERVER=/home/java/server   
  4. cd $SERVER   
  5.   
  6. case "$1" in   
  7.   
  8.   start)   
  9.     nohup java -Xmx128m -jar server.jar > $SERVER/server.log 2>&1 &   
  10.     echo $! > $SERVER/server.pid   
  11.     ;;   
  12.   
  13.   stop)   
  14.     kill `cat $SERVER/server.pid`   
  15.     rm -rf $SERVER/server.pid   
  16.     ;;   
  17.   
  18.   restart)   
  19.     $0 stop   
  20.     sleep 1   
  21.     $0 start   
  22.     ;;   
  23.   
  24.   *)   
  25.     echo "Usage: run.sh {start|stop|restart}"  
  26.     ;;   
  27.   
  28. esac   
  29.   
  30. exit 0  

shell学习2

 

 

#声明执行该脚本的程序使用sh或bash
#! /bin/sh

#利用pwd命令获取当前工程目录,实际获取到的是该shell脚本的目录。再利用sed命令将/bin替换为空
Project_HOME=$(echo `pwd` | sed 's/\/bin//')

#存放进程文件
ProjectPIDFILE=$Project_HOME/project.pid

#case语句,对应结束为esac 特殊变量$1,该变量包含有传递给该脚本的第一个参数值
#一般运行时,都是./**** start or stop ,所以参数值如下所示
case $1 in

#输入参数为start时
start)

#输出starting project ... ,echo可以看成print to screen
echo "Starting project ... "

#设置变量Heap的大小,表示JVM虚拟机堆内存的大小,XMS初始化内存,XMX最大内存,一般两个相等且不超过2G。
HEAP_MEMORY=512m

#永久域内存,永久区域用来存放Java类及其他虚拟机自己的静态数据,
#也包含初始化和最大值,一般设置相等,减少达到初始化值时去申请内存的开销
PERM_MEMORY=64m

#JMX连接端口
JMX_PORT=7001

#jvm启动部分参数
JAVA_OPTS="-server -Djava.nio.channels.spi.SelectorProvider=sun.nio.ch.EPollSelectorProvider -XX:+HeapDumpOnOutO
fMemoryError -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.j
mxremote.ssl=false"

#shift 命令,shift 命令执行前变量 $1 的值在 shift 命令执行后就不可用,位置变量的指向向后移1次
shift

#($*)所有参数赋给ARGS,当然$1除外
ARGS=($*)

#if循环加case语句,作用就是把shell的参数值赋给之前定义的变量,比如./*.sh start -JmxPort 8888

#则定义的JMX_PORT=7001即变为8888
for ((i=0; i<${#ARGS[@]}; i++)); do

case "${ARGS[$i]}" in
-D*) JAVA_OPTS="${JAVA_OPTS} ${ARGS[$i]}" ;;
-Heap*) HEAP_MEMORY="${ARGS[$i+1]}" ;;
-Perm*) PERM_MEMORY="${ARGS[$i+1]}" ;;
-JmxPort*) JMX_PORT="${ARGS[$i+1]}" ;;
esac
done

#完整的jvm启动参数,将之前定义的变量组合。
JAVA_OPTS="${JAVA_OPTS} -Xms${HEAP_MEMORY} -Xmx${HEAP_MEMORY} -XX:PermSize=${PERM_MEMORY} -X X:MaxPermSize=${PERM_MEMORY} -Dcom.sun.management.jmxremote.port=${JMX_PORT} -Duser.dir=${Projec t_HOME}"

#输出参数
echo "start jvm args ${JAVA_OPTS}"

#此条语句最为重要,使用nohup命令启动jar包,nohup命令就是让程序永远在后台运行
nohup java $JAVA_OPTS -jar ${Project_HOME}/bin/project.jar &

# $!为系统变量,表示上一个子进程的进程号。 shell遇到”>”操作符,会判断右边文件是否存在,如果存在就先删除,并且创建新文件。
#不存在直接创建。无论左边命令执行是否成功。右边文件都会变为空。
#重定向不是很理解,个人认为就是将进程号保存在 project.pid文件中
echo $! > $ProjectPIDFILE

#打印系统启动成功
echo STARTED

#一直不知道两个连着的分号是啥意思,我想应该就是break的意思
;;

#如果$1为stop时
stop)
echo "Stopping project ... "

#首先判断project.pid是否存在,若不存在返回没有找到文件。-f 判断后面参数是否是一个文件,若是返回1
if [ ! -f $ProjectPIDFILE ]
then
echo "error: count not find file $ProjectPIDFILE"
exit 1
else

#杀掉系统进程 $(cat $ProjectPIDFILE)
kill -9 $(cat $ProjectPIDFILE)
rm $ProjectPIDFILE
echo STOPPED
fi
;;

#如果$1不是start、stop等任意字符时,
*)
echo "Exec ... "

#调用ant来执行这个命令
ant $*
;;

#结束case语句
esac

exit 0

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值