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