由於公司項目需要,將一個大項目分成N多個子系統,而這些又全部部署在同一個目錄下不同的tomcat裏,每次一斷電,測試服務器上的服務就要一個一個啓動,就想着能不能寫個shell腳本一次搞定,研究一上午,弄了個大概,還有許多地方需要優化,稍候會說,先記錄一下,省的以後找起來麻煩。
思路很簡單:
1、系統啓動的時候順便啓動一個服務,這個服務用來調用shell腳本
2、編寫一個shell腳本,遍歷目錄下所有的tomcat,找到startup.sh並執行
話不多說,來看代碼。
①在/etc/init.d下新建一個文件tomcat-auto-start-service
vi /etc/init.d/tomcat-auto-start-service
內容如下:
#!/bin/sh
# chkconfig: 345 99 10
# description: Auto-starts tomcat
# /etc/init.d/tomcatd
# Tomcat auto-start
# Source function library.
#. /etc/init.d/functions
# source networking configuration.
#. /etc/sysconfig/network
ETVAL=0
start()
{
./startTomcat.sh
}
case "$1" in
start)
start
;;
esac
exit $RETVAL
該腳本大概意思是該服務有一個start方法,下面會有用到,而start方法只做一件事就是調用下面的shell腳本。
另外在根目錄下新建一個startTomcat.sh,內容如下
#!/bin/bash
function ergodic(){
for file in ` ls $1 `
do
if [ "$file"x = "startup.sh"x ];
then
.$1"/"$file
sleep 5
echo $1"/"$file
elif [ -d $1"/"$file ]
then
ergodic $1"/"$file
fi
done
}
INIT_PATH="/usr/local/tomcat"
ergodic $INIT_PATH
該腳本的大概意思:傳入初始化路徑,遍歷該目錄,如果遇到文件名爲startup.sh,則執行,否則遞歸調用,並傳入當前目錄
(語法我也是一瓶子不滿半瓶子咣噹的,請大神來吐槽)
:wq
②給該文件授權,反正是公司內部測試服務器,爲了方便,授權777
chmod -R 777 tomcat-auto-start-service
③掛載,具體rcX.d是幹嘛的,有興趣的童鞋可以研究一下,需要說明的是最後的命名,以S或者以K開頭是有原因的,根據不同需要可能是S開頭,也可能是K開頭,之後的數字代表他們的啓動順序
ln -s /etc/init.d/tomcat-auto-start-service /etc/rc2.d/S16TomcatAutoStart
④設置自動啓動,其實也就是加入到啓動服務中
chkconfig --add tomcat-auto-start-service
⑤重啓,驗證
reboot
注:此後也可以用service tomcat-auto-start-service start 來啓動所有的tomcat服務
需要進一步優化:
一、如果tomcat/bin/startup.sh沒有權限,不能自動授權
二、只有start服務沒有stop和restart(由於暫時只有這一個需求,先寫這一個功能,程序猿最好不要過度設計)
三、這種遍歷目錄查找startup.sh的方法貌似不太好,然而暫時未想到其他方法,希望看到的大神給指點一二
以此爲記,繼續努力。
參考文獻:
http://blog.csdn.net/wangli61289/article/details/37924785
http://hw1287789687.iteye.com/blog/1766217