程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 防止同一個Java應用重復啟動的shell腳本

防止同一個Java應用重復啟動的shell腳本

編輯:關於JAVA

通常,一個Java的後台應用程序,在Linux的終端可以啟動多個,這樣造成資源浪費,甚至相互操作競爭資源導致問題。這裡通過也shell腳本啟動應用,在shell腳本中做了些限制。就可以巧妙避免重復啟動的問題了。

比如應用的目錄結構為:

app
        bin(存放啟動腳本startup.sh和class文件、配置文件等。)
        lib(存放引用的庫)

假設應用的類名為:mypack.MyAppMain

startup.sh

#!/bin/sh
programdir="."
program="mypack.MyAppMain"
num=$#
temp=$CLASSPATH
#setting libs path
libs=../lib/*
append(){
                 temp=$temp":"$1
}
for file in $libs;    do
                 append $file
done
export CLASSPATH=$temp:.:../:$programdir
export LANG=zh_CN
res=`ps aux|grep java|grep $program|grep -v grep|awk '{print $2}'`
if [ -n "$res" ]
      then
                 echo "MyAppMain already running"
else

              nohup java    -classpath $CLASSPATH    mypack.MyAppMain &

              sleep 3
                 unset res
                 res=`ps aux|grep java|grep $program|grep -v grep|awk '{print $2}'`
                 if [ -n "$res" ]
                     then
                          echo "MyAppMain start success"
                     else
                          echo "MyAppMain start error"
                  fi
fi

然後通過此腳本來啟動,就可以解決問題了。

注意:

啟動時候還可能出現startup.sh沒有執行權限的問題,改為777。

還有可能出現錯誤信息:

: bad interpreter: 沒有那個文件或目錄

這是因為startup.sh腳本的編碼不對,你需要保證文檔格式是UNIX的,這個問題好多人栽過跟頭,我也不例外,以為shell腳本語法不對,其實是文件編碼的問題!

下面給出沒有限制的重復啟動問題的腳本:

#!/bin/sh
programdir="."
num=$#
temp=$CLASSPATH
#setting libs path
libs=../lib/*
append(){
                 temp=$temp":"$1
}
for file in $libs;    do
                 append $file
done
export CLASSPATH=$temp:.:../:$programdir
export LANG=zh_CN
nohup java    -classpath $CLASSPATH    mypack.MyAppMain &

出處:http://lavasoft.blog.51cto.com/62575/243360

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved