用於在引導時從目錄啟動多個 Java 程序的 shell 腳本
我不確定這是否是最好的方法,這是我第一次做所有這些(包括編寫 shell 腳本)。
作業系統:數百
我的問題:我想在啟動時啟動多個 shell 腳本。其中一個 shell 腳本用於啟動我自己的服務,另外 3 個用於第三方服務。
啟動我自己的服務的 shell 腳本將尋找 jar 文件。
我目前有兩個服務(將更改),用 Java 編寫。
所有服務都以約定前綴服務服務名稱命名
我所做的:我創建了以下目錄結構
/home/username/scripts init.sh boot/ boot/startthirdprtyservice1.sh boot/startthirdprtyservice2.sh boot/startthirdprtyservice3.sh boot/startmyservices.sh /home/username/services prefix-lib-libraryname.jar prefix-lib-libraryname.jar prefix-service-servicename.jar prefix-service-servicename.jar prefix-service-servicename.jar
在 init.sh 我有以下內容:
#!/bin/sh #This scripts run all executable scripts in the boot directory at boot #done by adding this script to the file /etc/rc.d/rc.local #nohup #run-parts /home/username/scripts/boot/* #for each file in the boot dir... # ignore the HUP (hangup) signal for s in ./boot/*;do if [ -x $s ]; then echo "Starting $s" nohup $s & fi done echo "Done starting bootup scripts " echo "\n"
在腳本 boot/startmyservices.sh 我有
#!/bin/sh fnmatch () { case "$2" in $1) return 0 ;; esac ; return 1 ; } ##sub strin to match for SUBSTRING="prefix-service" for s in /home/username/services/*;do if [ -x $s ]; then #match service in the filename , i.e. only services are started if fnmatch "$SUBSTRING" "$s" ; then echo "Starting $s " nohup $s & fi fi done echo "Done starting Services" echo "\n"
最後:
通常你可以在 /etc/rc.d/rc.local 中粘貼一個程序,讓它在啟動時執行,但我認為這在這種情況下不起作用,或者我不知道該放什麼
我剛剛通過閱讀了解瞭如何做到這一點,所以我不確定這是最好的做法,因此任何建議都值得讚賞。
當我執行 init.sh nohup.out 包含
啟動第三方守護程序… 第三方啟動… …
但 myservices.sh 中沒有任何內容,並且我的 Java 服務沒有執行
我不確定從哪裡開始調試或可能出了什麼問題。
編輯
發現了一些問題並讓它工作,使用 -x 而不是 -n 來檢查字元串是否不為零,需要子字元串檢查也是 if [[ $s = $SUBSTRING ]] ; 然後最後一個只是愚蠢的,在 $s 前面缺少 java -jar 仍然不確定如何讓 init.sh 在啟動時執行
就我個人而言,我會為所有服務使用 init.d 腳本,而不是創建一個啟動另一個程序的 shell 腳本。
因此,請查看創建 init.d 腳本,然後您可以使用 chkconfig –add 將您的應用程序添加到啟動中。
這是一個例子
這是我在網上找到的東西:
cp <script-file> /etc/init.d ln -s /etc/init.d/<scriptfile> /etc/rc.d/rc5.d/S50<scriptfile> ln -s /etc/init.d/<scriptfile> /etc/rc.d/rc5.d/K50<scriptfile>
S50 是告訴系統在開機時啟動腳本,K50 是告訴系統在你關機時干淨地關機。數字表示腳本應該以哪個順序啟動/關閉。