WildFly run-batch: запуск всех развертываний с зависимостями

У меня есть сервер WildFly 10, на котором установлено около 12 развертываний, и список развертываний может периодически меняться. Основная проблема в том, что когда я перезагружаю сервер, приложения пытаются развернуть одновременно. Тем не мение,большинство приложений не может запуститься, пока не будут запущены другие развертывания. Фактически, у них есть строгая последовательность выполнения. Таким образом, при перезапуске сервера Wildfly часть развертывания будет запущена с ошибкой и работать не будет. Я придумал хак:

  1. Остановить серверный процесс WildFly
  2. В standalone.xml все развертывания установлены в состояние отключения (с помощью команды cli)
  3. Запустить сервер WildFly
  4. Запустить сценарий:
    export JAVA_HOME=/usr/java/jdk1.8.0_131
    export WILDFLY_HOME=/opt/wildfly

    PATH=$WILDFLY_HOME/bin:$PATH

    jcli=$WILDFLY_HOME/bin/jboss-cli.sh

    args="--connect --controller=`hostname`:9990"

    modules=`$jcli $args --command="ls deployment -l" | sed 's/\(.*\)/deploy --name=\1/'`


    if [ -z "${modules// /}" ]
    then
       echo "Nothing to start on this server `hostname`"
       exit 0
    fi

    $jcli $args <<EOF
    batch
    $modules
    run-batch --headers={allow-resource-service-restart=true}
    EOF

При этом при первом запуске скрипта из 4 точек получаю ошибки: ClassNotFoundException и NoClassDefFoundError. Развертывания не начинаются. Но если я запускаю этот скрипт во второй раз - все запускается.

Собственно вопрос, как это второй раз все запускается? Есть ли способ сделать это проще, без ошибок, может быть, есть операция в CLI, которая все это делает «правильно» (генерирует последовательность запуска или что-то в этом роде)?

0
задан 15 July 2019 в 16:55
1 ответ

Как оказалось, этот подход работает каждое второе время.

, Другими словами, в 50% случаев, даже от второго раза, все приложения не запускаются с такого сценария.

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

ls deployment -l

Затем, это проверяет вывод со списком последовательностей и запусков в свою очередь те приложения, которые доступны на WildFly.

0
ответ дан 23 November 2019 в 22:53