LINUX.ORG.RU
ФорумAdmin

Раздружить приложения

 , ,


0

2

Нужно запустить два экземпляра одного приложения. Приложение написано так, что не подразуевает, что может быть запущен второй экземпляр.

24093 pts/0    Sl     0:08 java -cp ../source/classes:../libs/* spasteriskconnector.SPAsteriskConnector

Запускает притложение этим кодом

#!/bin/sh

THISDIR=$(cd "$(dirname "$0")"; pwd)
cd $THISDIR

JAVACLASS=spasteriskconnector.SPAsteriskConnector
JAVACP=../source/classes:"../libs/*"

# Kill old process
JAVAPID=$(ps ax | grep $JAVACLASS | grep -v grep | head -1 | awk '{print $1}')
if [ "$JAVAPID" != "" ]
then
    kill -15 $JAVAPID
fi

if [ "$1" != "stop" ]
then
    java -cp $JAVACP $JAVACLASS
fi

Соответсвенно при запуске второго экземпляра, первый ищется по JAVACLASS и убивается. Повлиять на «JAVACLASS» нет возможности.

Как их проще изолировать друг от друга на одной системе? Приложение вешается на ip:порт, котороыми можно маниврировать в ini.

★★★★★

Последнее исправление: petav (всего исправлений: 1)

Закоммнтировал эту строчку

#JAVAPID=$(ps ax | grep $JAVACLASS | grep -v grep | head -1 | awk '{print $1}')
#if [ "$JAVAPID" != "" ]
#then
#    kill -15 $JAVAPID
#fi
Два приложения разнесенные по разным портам не мешают друг-другу. Выглядит это так
24093 pts/0    Sl     0:16 java -cp ../source/classes:../libs/* spasteriskconnector.SPAsteriskConnector
24539 pts/0    Sl     0:07 java -cp ../source/classes:../libs/* spasteriskconnector.SPAsteriskConnector
Пока вынес «убийцу» процесов в отдельный файл....

petav ★★★★★
() автор топика

ps ax | grep $JAVACLASS | grep -v grep | head -1 | awk '{print $1}'

А так не подойдёт?
grep $JAVACLASS | head -1

Как их проще изолировать друг от друга на одной системе? Приложение вешается на ip:порт, котороыми можно маниврировать в ini.

pgrep -u $(whoami) $JAVACLASS | head -1
И пускай под разными пользователями

imul ★★★★★
()
#!/bin/sh

(
  flock --exclusive --nonblock 9 || exit 1
  java -cp $JAVACP $JAVACLASS
) 9> "$TMPDIR/java-app.lock"

Приложение не должно форкаться.

anonymous
()

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

upcFrost ★★★★★
()
Последнее исправление: upcFrost (всего исправлений: 1)
Ответ на: комментарий от ArcFi

Да нужно init скрипт переделывать. Но этот скрипт в поставке был. Потому как если restart будет останаливат тот процесс который нужен (по pid ориентируясь) то все будет работать.

petav ★★★★★
() автор топика
Последнее исправление: petav (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.