Назад | Перейти на главную страницу

сценарий оболочки для запуска нескольких программ Java из каталога при загрузке

Я не уверен, что это лучший подход к этому. Я впервые делаю все это (включая написание сценариев оболочки).

ОС: Centos

Моя проблема: я хочу запускать несколько сценариев оболочки при загрузке. Один из сценариев оболочки предназначен для запуска моих собственных служб, а 3 других - для сторонних служб.

Сценарий оболочки для запуска моих собственных служб будет искать файлы jar.

У меня сейчас две службы (буду менять), написанные на Java.

Все сервисы названы в соответствии с соглашением prefix-service-servicename.

Что я сделал: я создал следующую структуру каталогов

/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 ]]; тогда и этот последний был просто глупым, отсутствовал java -jar перед $ s Все еще не уверены, как заставить init.sh работать при загрузке

Лично я бы использовал сценарии init.d для всех служб вместо создания сценария оболочки, запускающего другой процесс.

Итак, рассмотрите создание сценария 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 должен сказать системе, что она должна полностью отключиться, когда вы завершаете работу. Число указывает, в каком порядке сценарий должен запускаться / завершаться.