У меня есть сервер WildFly 10, на котором установлено около 12 развертываний, и список развертываний может периодически меняться. Основная проблема в том, что когда я перезагружаю сервер, приложения пытаются развернуть одновременно. Тем не мение,большинство приложений не может запуститься, пока не будут запущены другие развертывания. Фактически, у них есть строгая последовательность выполнения. Таким образом, при перезапуске сервера Wildfly часть развертывания будет запущена с ошибкой и работать не будет. Я придумал хак:
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, которая все это делает «правильно» (генерирует последовательность запуска или что-то в этом роде)?
Как оказалось, этот подход работает каждое второе время.
, Другими словами, в 50% случаев, даже от второго раза, все приложения не запускаются с такого сценария.
я должен был обратиться к формированию переменной, которая описывает последовательность запущения приложений. Эта последовательность включает все возможные приложения, поэтому если некоторые из них предварительно установлены, то это не проблема. Сценарий проверяет на приложения посредством команды:
ls deployment -l
Затем, это проверяет вывод со списком последовательностей и запусков в свою очередь те приложения, которые доступны на WildFly.