歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> SHELL編程 >> Linux下Java程序的啟動Shell腳本

Linux下Java程序的啟動Shell腳本

日期:2017/3/1 10:32:25   编辑: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的主類名。

Copyright © Linux教程網 All Rights Reserved