由於公司專案需要,將乙個大專案分成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
()
case
"$1"
in
start)
start
;;
esac
exit
$retval
該指令碼大概意思是該服務有乙個start方法,下面會有用到,而start方法只做一件事就是呼叫下面的shell指令碼。
另外在根目錄下新建乙個starttomcat.sh,內容如下
#!/bin/bash
function ergodic
()
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的方法貌似不太好,然而暫時未想到其他方法,希望看到的大神給指點一二
以此為記,繼續努力。
參考文獻:
linux獲取系統啟動時間
1 前言 2 sysinfo結構 sysinfo結構保持了系統啟動後的資訊,主要包括啟動到現在的時間,可用記憶體空間 共享記憶體空間 程序的數目等。man sysinfo得到結果如下所示 struct sysinfo 3 獲取系統啟動時間 通過sysinfo獲取系統啟動到現在的秒數,用當前時間減去這...
linux系統啟動時間分析
sudo apt get install bootchart pybootchartgui pngquant 安裝bootchart時會執行以下操作 update initramfs generating boot initrd.img 3.14.18 031418 generic 由乙個執行在in...
linux獲取系統啟動時間
1 前言 2 sysinfo結構 sysinfo結構保持了系統啟動後的資訊,主要包括啟動到現在的時間,可用記憶體空間 共享記憶體空間 程序的數目等。man sysinfo得到結果如下所示 1 struct sysinfo 3 獲取系統啟動時間 通過sysinfo獲取系統啟動到現在的秒數,用當前時間減...