Запуск нескольких экземпляров Java-приложения через bash, как получить доступ к их меню оболочки? - PullRequest
2 голосов
/ 22 июня 2011

Итак, я получил работу по тестированию нового Java-движка.Программист, создавший его, сделал мне тестовый jar-файл, чтобы я мог протестировать некоторые аварийные моменты и балансировку нагрузки.

Я знаю, что здесь много текста, но я надеюсь, что кто-то может дать мне отличный ответ!Заранее спасибо за чтение!

Я хотел автоматизировать процесс тестирования, поэтому я создал файл bash.

Пока что он выполняет цикл несколько раз, в которомон запускает файл jar:

java -jar /mnt/nas/i/testsail/clusteng.jar 2>> /dev/null &

После этого он получает processId только что запущенного Java-приложения:

process_ids[$i]=$!

Так что в итоге у меня есть 5 экземпляров этого jar, все сих связанный идентификатор процесса.

Теперь моя проблема в том, что программист добавил небольшую оболочку вокруг приложения, в которой я могу сказать, в какой момент произойти сбой.Если я просто запускаю движок из командной строки, он показывает мне эту оболочку, и я могу просто напечатать 'fail moment_Of_Faillure', и он будет терпеть неудачу.

Конечно, теперь я хочу дать каждому экземпляру еще один момент отказа, и яхочу сделать это из сценария bash.

У меня вопрос; Как я могу дать команды каждому экземпляру из скрипта bash?

Я выложу полный скрипт скрипта здесь:

#!/bin/bash
# Engine testing script; Starts multiple engine instances and shoots one every 20 seconds
clear
echo "#####################"
echo "# Start $1 processes #"
echo "#####################"
echo ""

# create number of processes
for ((  i = 1 ;  i <= $1;  i++  ))
do
    if test $i == 1
    then
        echo "Starting process: $i -> Master Process"
    else
        echo "Starting process: $i"
    fi

    #$! = last started process
    java -jar /mnt/nas/i/testsail/clusteng.jar 2>> /dev/null &
    process_ids[$i]=$!
    echo "PID $!"
    echo ""

    sleep 20
done

sleep 20

for ((  i = 1 ;  i <= $1;  i++  ))
do
    echo "Kill PID:${process_ids[$i]}"
    #ech `FAIL BEFORE_RANK_DISTRIBUTION` > fifo$i
    kill -9 ${process_ids[$i]}
    echo ""
    if test $i != $1
    then
       sleep 20
    fi
done

# run errorcheck
. `./checklogs`

1 Ответ

3 голосов
/ 22 июня 2011

Вы можете использовать именованные каналы (fifos) для отправки команд фоновым процессам.

Некоторые советы и рекомендации смотрите здесь:

Отправить команду фоновому процессу

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...