shell 脚本在启动时从目录启动多个 Java 程序

shell 脚本在启动时从目录启动多个 Java 程序

我不确定这是否是最好的方法,这是我第一次做这一切(包括编写 shell 脚本)。

操作系统:Centos

我的问题:我想在启动时启动多个 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 来检查字符串是否为非零,需要子字符串检查是否为 [[ $s =子串]] ; 然后最后一个很愚蠢,在 $s 前面缺少 java -jar 仍然不确定如何让 init.sh 在启动时运行

答案1

就我个人而言,我会对所有服务使用 init.d 脚本,而不是创建启动另一个进程的 shell 脚本。

因此,研究创建 init.d 脚本,然后您可以使用 chkconfig --add 将您的应用程序添加到启动中。

这里就是一个例子

答案2

以下是我在网上找到的一些东西:

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 是告诉系统在关机时彻底关闭。数字代表脚本应按什么顺序启动/关闭。

相关内容