tomcat啓動腳本startup.sh分析

1、分析說明linux

爲了寫出更加完善的tomcat啓動方面的自動化腳本,健壯本身用於代碼上線自動化部署的腳本,特分析下tomcat的bin目錄下的starup.sh腳本,學習標準的sh腳本的編寫方法,從中吸收經驗.
    2、腳本分析
    #!/bin/sh

Licensed to the Apache Software Foundation (ASF) under one or more

contributor license agreements. See the NOTICE file distributed with

this work for additional information regarding copyright ownership.

The ASF licenses this file to You under the Apache License, Version 2.0

(the "License"); you may not use this file except in compliance with

the License. You may obtain a copy of the License at

#shell

http://www.apache.org/licenses/LICENSE-2.0

#express

Unless required by applicable law or agreed to in writing, software

distributed under the License is distributed on an "AS IS" BASIS,

WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

See the License for the specific language governing permissions and

limitations under the License.

-----------------------------------------------------------------------------

Start Script for the CATALINA Server

#apache

$Id: startup.sh 1130937 2011-06-03 08:27:13Z markt $

-----------------------------------------------------------------------------

Better OS/400 detection: see Bugzilla 31132

os400=false
darwin=false
#os400是 IBM的AIX
#darwin是MacOSX 操做環境的操做系統成份
#Darwin是windows平臺上運行的類UNIX模擬環境
case "uname" in
CYGWIN) cygwin=true;;
OS400
) os400=true;;
Darwin*) darwin=true;;
esac
#上一個判斷是爲了判斷操做系統,至於何用,往下看windows

resolve links - $0 may be a softlink

#讀取腳本名
PRG="$0"
#test –h File 文件存在而且是一個符號連接(同-L)
while [ -h "$PRG" ] ; do
ls=ls -ld "$PRG"
link=expr "$ls" : '.*-> \(.*\)$'
if expr "$link" : '/.' > /dev/null; then
PRG="$link"
else
PRG=dirname "$PRG"/"$link"
fi
done
#上面循環語句的意思是保證文件路徑不是一個鏈接,使用循環直至找到文件原地址
#遇到一時看不明白的shell,能夠拆解後本身在linux反覆運行驗證,一點點拆解就會明白的
#link=`expr "$ls" : '.
-> (.)$'` 模擬後: expr 'lrwxrwxrwx 1 root root 19 3月 17 10:12 ./bbb.sh -> /root/shell/test.sh' : '.-> (.*)$'
#很明確的發現是用expr來提取/root/shell/test.sh的內容
#而這個循環就能夠明確其目的,排除命令爲連接,找出命令真正的目錄,防止後面的命令出錯
#這段代碼若是在之後有這方面的找出連接源頭的需求能夠徹底借鑑tomcat

#獲取這個腳本的目錄
PRGDIR=dirname "$PRG"
EXECUTABLE=catalina.shapp

Check that target executable exists

#這些判斷是否氣是其餘的操做系統
if $os400; thenless

-x will Only work on the os400 if the files are:

1. owned by the user

2. owned by the PRIMARY group of the user

this will not work if the user belongs in secondary groups

eval
#這個eval尚未理解
else
if [ ! -x "$PRGDIR"/"$EXECUTABLE" ]; then
#判斷腳本catalina.sh是否存在並有可執行權限,沒有執行權限就退出
echo "Cannot find $PRGDIR/$EXECUTABLE"
echo "The file is absent or does not have execute permission"
echo "This file is needed to run this program"
exit 1
fi
fi
exec "$PRGDIR"/"$EXECUTABLE" start "$@"
#exec命令在執行時會把當前的shell process關閉,而後換到後面的命令繼續執行。
#exec命令能夠很好的進行腳本之間過渡,而且結束掉前一個腳本這樣不會對後面執行的腳本形成干擾。
#exec 命令:經常使用來替代當前 shell 並從新啓動一個 shell,換句話說,並無啓動子 shell。使用這一命令時任何現
#有環境都將會被清除。exec 在對文件描述符進行操做的時候,也只有在這時,exec 不會覆蓋你當前的 shell 環境。
#exec 能夠用於腳本執行完啓動須要啓動另外一個腳本是使用,但須考慮到環境變量是否被繼承。
3、總結ide

tomcat的startup.sh腳本主要用來判斷環境,找到catalina.sh腳本源路徑,將啓動命令參數傳遞給catalina.sh執行。然而catalina.sh腳本中也涉及到判斷系統環境和找到catalina.sh腳本原路徑的相關代碼,因此執行tomcat啓動時,無需使用startup.sh腳本(下一篇分析的shutdown.sh也相似),直接./catalina.sh start|stop|restart 便可。
相關文章
相關標籤/搜索