shell 启动程序

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,并且前面还增加了程序是否已启动的检查。

 

Shell代码 复制代码 收藏代码
  1. #!/bin/sh
  2. ##############
  3. #判断是否程序已启动
  4. jappname='MyAppClass'
  5. javaps=`jps`
  6. i=0
  7. psid=0
  8. forpsresultin$javaps
  9. do
  10. letcur=i%2
  11. if[$cur-eq0];then
  12. psid=$psresult
  13. else
  14. if(test"$psresult"="$jappname")
  15. then
  16. echo"程序"$jappname"[pid="$psid"]已经启动!"
  17. exit0
  18. fi
  19. fi
  20. leti++;
  21. done
  22. #引入依赖类库到类路径
  23. exportCLASSPATH=.
  24. pathtmp=''
  25. forjarpathin`lslib/*.jar`
  26. do
  27. CLASSPATH=$CLASSPATH:$jarpath
  28. done
  29. exportCLASSPATH=$CLASSPATH
  30. java-servercom.myapp.MyAppClass$*

#!/bin/sh###############判断是否程序已启动jappname='MyAppClass'javaps=`jps`i=0psid=0for psresult in $javapsdo 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 doneexport CLASSPATH=$CLASSPATHjava -server com.myapp.MyAppClass $*

 

 

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

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

 

Shell代码 复制代码 收藏代码
  1. #####################
  2. #!/bin/sh
  3. #killalljavaapplications
  4. #####################
  5. javaps=`jps`
  6. i=0
  7. psid=0
  8. forpsresultin$javaps
  9. do
  10. letcur=i%2
  11. if[$cur-eq0];then
  12. psid=$psresult
  13. else
  14. if(test"$psresult"="Main"-o"$psresult"="Jps")
  15. then
  16. echo$psresult"nottobekilled."
  17. else
  18. echo"kill"$psresult
  19. kill$psid
  20. fi
  21. fi
  22. leti++;
  23. done
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值