#MainMethod
APP_MAINCLASS=com.merself.server.StartServerjava
# ===================================================
APP_HOME=`dirname $0`
CLASSPATH=$APP_HOME/
psid=0
#===================================================shell
checkpid() {
javaps=`$JAVA_HOME/bin/jps -l | grep $APP_MAINCLASS`
if [ -n "$javaps" ]; then
psid=`echo $javaps | awk '{print $1}'`
else
psid=0
fi
}編程
###################################
#(函數)啓動程序
#
#說明:
#1. 首先調用checkpid函數,刷新$psid全局變量
#2. 若是程序已經啓動($psid不等於0),則提示程序已啓動
#3. 若是程序沒有被啓動,則執行啓動命令行
#4. 啓動命令執行後,再次調用checkpid函數
#5. 若是步驟4的結果可以確認程序的pid,則打印[OK],不然打印[Failed]
#注意:echo -n 表示打印字符後,不換行
#注意: "nohup 某命令 >/dev/null 2>&1 &" 的用法
###################################
start() {
checkpid
if [ $psid -ne 0 ]; then
echo "================================"
echo "warn: $APP_MAINCLASS already started! (pid=$psid)"
echo "================================"
else
echo -n "Starting $APP_MAINCLASS ..."ide
cd $APP_HOME
java -classpath .:lib/* $APP_MAINCLASS &函數
checkpid
if [ $psid -ne 0 ]; then
echo "(pid=$psid) [OK]"
else
echo "[Failed]"
fi
fi
}spa
###################################
#(函數)中止程序
#
#說明:
#1. 首先調用checkpid函數,刷新$psid全局變量
#2. 若是程序已經啓動($psid不等於0),則開始執行中止,不然,提示程序未運行
#3. 使用kill -9 pid命令進行強制殺死進程
#4. 執行kill命令行緊接其後,立刻查看上一句命令的返回值: $?
#5. 若是步驟4的結果$?等於0,則打印[OK],不然打印[Failed]
#6. 爲了防止java程序被啓動屢次,這裏增長反覆檢查進程,反覆殺死的處理(遞歸調用stop)。
#注意:echo -n 表示打印字符後,不換行
#注意: 在shell編程中,"$?" 表示上一句命令或者一個函數的返回值
###################################
stop() {
checkpid
if [ $psid -ne 0 ]; then
echo -n "Stopping $APP_MAINCLASS ...(pid=$psid) "
su - $RUNNING_USER -c "kill -9 $psid"
if [ $? -eq 0 ]; then
echo "[OK]"
else
echo "[Failed]"
fi
checkpid
if [ $psid -ne 0 ]; then
stop
fi
else
echo "================================"
echo "warn: $APP_MAINCLASS is not running"
echo "================================"
fi
}
命令行
###################################
#(函數)檢查程序運行狀態
#
#說明:
#1. 首先調用checkpid函數,刷新$psid全局變量
#2. 若是程序已經啓動($psid不等於0),則提示正在運行並表示出pid
#3. 不然,提示程序未運行
###################################
status() {
checkpid
if [ $psid -ne 0 ]; then
echo "$APP_MAINCLASS is running! (pid=$psid)"
else
echo "$APP_MAINCLASS is not running"
fi
}rest
###################################
#(函數)打印系統環境參數
###################################
info() {
echo "System Information:"
echo "****************************"
echo `head -n 1 /etc/issue`
echo `uname -a`
echo
echo "JAVA_HOME=$JAVA_HOME"
echo `$JAVA_HOME/bin/java -version`
echo
echo "APP_HOME=$APP_HOME"
echo "APP_MAINCLASS=$APP_MAINCLASS"
echo "****************************"
}orm
###################################
#讀取腳本的第一個參數($1),進行判斷
#參數取值範圍:{start|stop|restart|status|info}
#如參數不在指定範圍以內,則打印幫助信息
###################################server
case "$1" in
start)
start
;;stop) stop;;restart) stop start ;;status) status;;info) info ;;*) echo "Usage: $0 {start|stop|restart|status|info}" exit 1esacexit 0