windows Linux下Java程序的啓動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,並且前面還增加了程序是否已啓動的檢查。

  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 $*  

附帶一個關閉大量Java進程的腳本

服務器上部署的有JBoss和十幾個Java程序,測試時經常需要把這十幾個Java程序重啓一遍,把Java進程全kill掉的話,JBoss也會被殺掉,但是JBoss不需要重啓,一個一個用ps命令找pid,再挨個kill?程序太多,無法忍受。JDK裏有個小工具叫jps,可以列出當前的Java進程,利用這個jps寫了一個殺掉除指定進程之外的所有Java進程的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  

Main是JBoss的主類名。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章