轉自:http://blog.csdn.net/jadyer/article/details/7960802
資料參考來源自
兔大俠,並略作修改:
http://www.tudaxia.com/archives/10,在此鳴謝!!
最后是我整理的用於查看Java應用程序運行狀態的serverStatus.sh(可單獨使用)
- #!/bin/sh
- #-------------------------------------------------------------------------------------------------------------
- #實際使用中,需注意以下兩點
- #1)直接在Linux/UNIX上面創建並編寫shell腳本
- # 這是因為Windows下編寫的*.sh文檔格式和編碼,是Linux/UNIX所不能完全承認的
- # 最直接的體現就是使用過程中會遇到很多似是而非的錯誤,這曾經搞瘋了一大片人
- #2)編寫完*.sh之后,記得[chmod 755 *.sh],否則會提示無法執行or沒有權限執行等等
- #-------------------------------------------------------------------------------------------------------------
- #JDK路徑
- #JAVA_HOME="/usr/java/jdk1.6.0_31"
- #JVM啟動參數
- #-server:一定要作為第一個參數,在多個CPU時性能佳
- #-Xloggc:記錄GC日志,這里建議寫成絕對路徑,如此便可在任意目錄下執行該shell腳本
- #JAVA_OPTS="-ms512m -mx512m -Xmn256m -Djava.awt.headless=true -XX:MaxPermSize=128m"
- JAVA_OPTS="-Duser.timezone=GMT+8 -server -Xms512m -Xmx512m -Xloggc:/app/code/CucPayTradePortalLog/gc.log"
- #Java程序日志所在的目錄
- APP_LOG=/app/code/CucPayTradePortalLog
- #Java程序主體所在的目錄,即classes的上一級目錄
- APP_HOME=/app/code/CucPayTradePortal
- #Java主程序,即main(String[] args)方法類
- APP_MAIN=com.cucpay.tradeportal.MainApp
- #classpath參數,包括指定lib目錄下的所有jar
- CLASSPATH=$APP_HOME/classes
- for tradePortalJar in "$APP_HOME"/lib/*.jar
- do
- CLASSPATH="$CLASSPATH":"$tradePortalJar"
- done
- #-------------------------------------------------------------------------------------------------------------
- #getTradeProtalPID()-->獲取Java應用的PID
- #說明:通過JDK自帶的JPS命令及grep命令,准確查找Java應用的PID
- #其中:[jps -l]表示顯示Java主程序的完整包路徑
- # awk命令可以分割出PID($1部分)及Java主程序名稱($2部分)
- #例子:[$JAVA_HOME/bin/jps -l | grep $APP_MAIN]-->>[5775 com.cucpay.tradeportal.MainApp]
- #另外:用這個命令也可以直接取到程序的PID-->>[ps aux|grep java|grep $APP_MAIN|grep -v grep|awk '{print $2}']
- #-------------------------------------------------------------------------------------------------------------
- #初始化全局變量tradePortalPID,用於標識交易前置系統的PID,0表示未啟動
- tradePortalPID=0
- getTradeProtalPID(){
- javaps=`$JAVA_HOME/bin/jps -l | grep $APP_MAIN`
- if [ -n "$javaps" ]; then
- tradePortalPID=`echo $javaps | awk '{print $1}'`
- else
- tradePortalPID=0
- fi
- }
- #-------------------------------------------------------------------------------------------------------------
- #startup()-->啟動Java應用程序
- #步驟:1)調用getTradeProtalPID()函數,刷新$tradePortalPID全局變量
- # 2)若程序已經啟動($tradePortalPID不等於0),則提示程序已啟動
- # 3)若程序未被啟動,則執行啟動命令
- # 4)啟動命令執行后,再次調用getTradeProtalPID()函數
- # 5)若步驟4執行后,程序的PID不等於0,則打印[Success],否則打印[Failed]
- #注意:[echo -n]表示打印字符后,不換行
- #注意:[nohup command > /path/nohup.log &]是將作業輸出到nohup.log,否則它會輸出到該腳本目錄下的nohup.out中
- #-------------------------------------------------------------------------------------------------------------
- startup(){
- getTradeProtalPID
- echo "======================================================================================"
- if [ $tradePortalPID -ne 0 ]; then
- echo "$APP_MAIN already started(PID=$tradePortalPID)"
- echo "======================================================================================"
- else
- echo -n "Starting $APP_MAIN"
- nohup $JAVA_HOME/bin/java $JAVA_OPTS -classpath $CLASSPATH $APP_MAIN > $APP_LOG/nohup.log &
- getTradeProtalPID
- if [ $tradePortalPID -ne 0 ]; then
- echo "(PID=$tradePortalPID)...[Success]"
- echo "======================================================================================"
- else
- echo "[Failed]"
- echo "======================================================================================"
- fi
- fi
- }
- #-------------------------------------------------------------------------------------------------------------
- #shutdown()-->停止Java應用程序
- #步驟:1)調用getTradeProtalPID()函數,刷新$tradePortalPID全局變量
- # 2)若程序已經啟動($tradePortalPID不等於0),則開始執行停止程序操作,否則提示程序未運行
- # 3)使用[kill -9 PID]命令強制殺掉進程
- # 4)使用[$?]獲取上一句命令的返回值,若其為0,表示程序已停止運行,則打印[Success],反之則打印[Failed]
- # 5)為防止Java程序被啟動多次,這里增加了反復檢查程序進程的功能,通過遞歸調用shutdown()函數的方式,反復kill
- #注意:Shell編程中,[$?]表示上一句命令或者上一個函數的返回值
- #-------------------------------------------------------------------------------------------------------------
- shutdown(){
- getTradeProtalPID
- echo "======================================================================================"
- if [ $tradePortalPID -ne 0 ]; then
- echo -n "Stopping $APP_MAIN(PID=$tradePortalPID)..."
- kill -9 $tradePortalPID
- if [ $? -eq 0 ]; then
- echo "[Success]"
- echo "======================================================================================"
- else
- echo "[Failed]"
- echo "======================================================================================"
- fi
- getTradeProtalPID
- if [ $tradePortalPID -ne 0 ]; then
- shutdown
- fi
- else
- echo "$APP_MAIN is not running"
- echo "======================================================================================"
- fi
- }
- #-------------------------------------------------------------------------------------------------------------
- #getServerStatus()-->檢查程序運行狀態
- #-------------------------------------------------------------------------------------------------------------
- getServerStatus(){
- getTradeProtalPID
- echo "======================================================================================"
- if [ $tradePortalPID -ne 0 ]; then
- echo "$APP_MAIN is running(PID=$tradePortalPID)"
- echo "======================================================================================"
- else
- echo "$APP_MAIN is not running"
- echo "======================================================================================"
- fi
- }
下面是我整理的用於啟動Java應用程序的startup.sh(可單獨使用)
- #!/bin/sh
- #-------------------------------------------------------------------------------------------------------------
- #該腳本的使用方式為-->[sh startup.sh]
- #該腳本可在服務器上的任意目錄下執行,不會影響到日志的輸出位置等
- #-------------------------------------------------------------------------------------------------------------
- #JAVA_HOME="/usr/java/jdk1.6.0_31"
- JAVA_OPTS="-Duser.timezone=GMT+8 -server -Xms2048m -Xmx2048m -Xloggc:/app/code/CucPayTradePortalLog/gc.log"
- APP_LOG=/app/code/CucPayTradePortalLog
- APP_HOME=/app/code/CucPayTradePortal
- APP_MAIN=com.cucpay.tradeportal.MainApp
- CLASSPATH=$APP_HOME/classes
- for tradePortalJar in "$APP_HOME"/lib/*.jar;
- do
- CLASSPATH="$CLASSPATH":"$tradePortalJar"
- done
- tradePortalPID=0
- getTradeProtalPID(){
- javaps=`$JAVA_HOME/bin/jps -l | grep $APP_MAIN`
- if [ -n "$javaps" ]; then
- tradePortalPID=`echo $javaps | awk '{print $1}'`
- else
- tradePortalPID=0
- fi
- }
- startup(){
- getTradeProtalPID
- echo "================================================================================================================"
- if [ $tradePortalPID -ne 0 ]; then
- echo "$APP_MAIN already started(PID=$tradePortalPID)"
- echo "================================================================================================================"
- else
- echo -n "Starting $APP_MAIN"
- nohup $JAVA_HOME/bin/java $JAVA_OPTS -classpath $CLASSPATH $APP_MAIN > $APP_LOG/nohup.log &
- getTradeProtalPID
- if [ $tradePortalPID -ne 0 ]; then
- echo "(PID=$tradePortalPID)...[Success]"
- echo "================================================================================================================"
- else
- echo "[Failed]"
- echo "================================================================================================================"
- fi
- fi
- }
- startup
下面是我整理的用於停止Java應用程序的shutdown.sh(可單獨使用)
- #!/bin/sh
- APP_MAIN=com.cucpay.tradeportal.MainApp
- tradePortalPID=0
- getTradeProtalPID(){
- javaps=`$JAVA_HOME/bin/jps -l | grep $APP_MAIN`
- if [ -n "$javaps" ]; then
- tradePortalPID=`echo $javaps | awk '{print $1}'`
- else
- tradePortalPID=0
- fi
- }
- shutdown(){
- getTradeProtalPID
- echo "================================================================================================================"
- if [ $tradePortalPID -ne 0 ]; then
- echo -n "Stopping $APP_MAIN(PID=$tradePortalPID)..."
- kill -9 $tradePortalPID
- if [ $? -eq 0 ]; then
- echo "[Success]"
- echo "================================================================================================================"
- else
- echo "[Failed]"
- echo "================================================================================================================"
- fi
- getTradeProtalPID
- if [ $tradePortalPID -ne 0 ]; then
- shutdown
- fi
- else
- echo "$APP_MAIN is not running"
- echo "================================================================================================================"
- fi
- }
- shutdown
最后是我整理的用於查看Java應用程序運行狀態的serverStatus.sh(可單獨使用)
- #!/bin/sh
- APP_MAIN=com.cucpay.tradeportal.MainApp
- tradePortalPID=0
- getTradeProtalPID(){
- javaps=`$JAVA_HOME/bin/jps -l | grep $APP_MAIN`
- if [ -n "$javaps" ]; then
- tradePortalPID=`echo $javaps | awk '{print $1}'`
- else
- tradePortalPID=0
- fi
- }
- getServerStatus(){
- getTradeProtalPID
- echo "================================================================================================================"
- if [ $tradePortalPID -ne 0 ]; then
- echo "$APP_MAIN is running(PID=$tradePortalPID)"
- echo "================================================================================================================"
- else
- echo "$APP_MAIN is not running"
- echo "================================================================================================================"
- fi
- }
- getServerStatus