Java

用於在引導時從目錄啟動多個 Java 程序的 shell 腳本

  • November 11, 2011

我不確定這是否是最好的方法,這是我第一次做所有這些(包括編寫 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 是告訴系統在你關機時干淨地關機。數字表示腳本應該以哪個順序啟動/關閉。

引用自:https://serverfault.com/questions/329266