shell 启动程序

来源:互联网 发布:把数据导入matlab 编辑:程序博客网 时间:2024/06/05 09:00

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. for psresult in $javaps   
  9. do   
  10.   let cur=i%2  
  11.   if [ $cur -eq 0 ]; then   
  12.     psid=$psresult   
  13.   else   
  14.     if (test "$psresult" = "$jappname")   
  15.     then   
  16.         echo "程序"$jappname"[pid="$psid"]已经启动!"  
  17.         exit 0  
  18.     fi         
  19.   fi   
  20.   let i++;   
  21. done   
  22. #引入依赖类库到类路径    
  23. export CLASSPATH=.   
  24. pathtmp=''  
  25. for jarpath in `ls lib/*.jar`   
  26. do   
  27.    CLASSPATH=$CLASSPATH:$jarpath      
  28. done   
  29. export CLASSPATH=$CLASSPATH   
  30. java -server com.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. # kill all java applications   
  4. #####################   
  5. javaps=`jps`   
  6. i=0  
  7. psid=0  
  8. for psresult in $javaps   
  9. do   
  10.   let cur=i%2  
  11.   if [ $cur -eq 0 ]; then   
  12.     psid=$psresult   
  13.   else   
  14.     if (test "$psresult" = "Main" -o "$psresult" = "Jps")   
  15.     then   
  16.         echo $psresult" not to be killed."  
  17.     else   
  18.         echo "kill "$psresult   
  19.         kill $psid   
  20.     fi         
  21.   fi   
  22.   let i++;   
  23. done