Nano Hash - криптовалюты, майнинг, программирование

Wildfly как сервис: как войти только один раз?

Я запускаю wildfly как службу в Linux.

Я использовал хорошо написанную инструкцию на http://developer-should-know.tumblr.com/post/112230363742/how-to-install-wildfly-as-a-service-on-linux, основанный на скрипте [wildflyhome/bin/init.d/wildfly-init-redhat.sh], содержащийся в дистрибутиве wildfly. Этот скрипт использует объявление

JBOSS_CONSOLE_LOG="/var/log/wildfly/console.log"

Проблема. Эта конфигурация регистрируется дважды: сначала в server.log (в wildflyhome/standalone/log), а затем в console.log. Это тратит память (и, возможно, некоторую производительность).

Поэтому я установил

JBOSS_CONSOLE_LOG="wildflyhome/standalone/log/server.log"

Но теперь каждая запись лога дважды записывается в server.log - :)

Вопрос. Как мне настроить wildfly так, чтобы он регистрировался только один раз?

11.05.2016

Ответы:


1

У меня была аналогичная проблема со службой Windows на Wildfly 11.0.0.Final. Служба Wildfly создала два дополнительных файла журнала. Пример:
wildfly-stderr.2017-11-22.log
wildfly-stdout.2017-11-22.log
Он сохранил все журналы как в файл stdout, так и в server.log.

Я не мог включить обработчики консоли из-за проблем с ведением журнала Spring Boot в старой версии. Вместо этого я отредактировал service.bat и изменил следующие строки:

if "%STDOUT%"=="" set STDOUT=auto
if "%STDERR%"=="" set STDERR=auto

К этому:

if "%STDOUT%"=="" set STDOUT=""
if "%STDERR%"=="" set STDERR=""

Похоже, что после этого протоколирование работает правильно (не забудьте удалить и установить сервис еще раз). Теперь сохраняет логи только в server.log. Я тестировал это некоторое время и не вижу отсутствующих журналов.

22.11.2017

2

Вы можете удалить console-handler из конфигурации серверов. По умолчанию WildFly регистрируется на стандартном выходе и в файле server.log. JBOSS_CONSOLE_LOG="/var/log/wildfly/console.log" видит вывод из stdout.

Чтобы удалить обработчик консоли, вы можете выполнить следующую команду CLI

/subsystem=logging/root-logger=ROOT:remove-handler(name=CONSOLE)

Если вы хотите, вы также можете удалить сам console-handler.

/subsystem=logging/console-handler=CONSOLE:remove
11.05.2016
  • Но разве скрипту службы не нужен обработчик консоли? 12.05.2016
  • Это выглядит так, что на самом деле довольно плохая идея. 12.05.2016

  • 3

    Что касается вопроса, нужен ли скриптам службы файл console.log, я бы сказал «да», сценариям init.d по умолчанию нужен обработчик консоли, потому что он выполняет поиск вывода, чтобы выяснить, когда служба запущена и работает:

                cat /dev/null > "$JBOSS_CONSOLE_LOG"
    
                if [ "$JBOSS_MODE" = "standalone" ]; then
                        start-stop-daemon --start --user "$JBOSS_USER" \
                        --chuid "$JBOSS_USER" --chdir "$JBOSS_HOME" --pidfile "$JBOSS_PIDFILE" \
                        --exec "$JBOSS_SCRIPT" -- -c $JBOSS_CONFIG $JBOSS_OPTS >> "$JBOSS_CONSOLE_LOG" 2>&1 &
                else
                        start-stop-daemon --start --user "$JBOSS_USER" \
                        --chuid "$JBOSS_USER" --chdir "$JBOSS_HOME" --pidfile "$JBOSS_PIDFILE" \
                        --exec "$JBOSS_SCRIPT" -- --domain-config=$JBOSS_DOMAIN_CONFIG \
                        --host-config=$JBOSS_HOST_CONFIG $JBOSS_OPTS >> "$JBOSS_CONSOLE_LOG" 2>&1 &
                fi
    
                count=0
                launched=0
                until [ $count -gt $STARTUP_WAIT ]
                do
                        grep 'JBAS015874:' "$JBOSS_CONSOLE_LOG" > /dev/null
                        if [ $? -eq 0 ] ; then
                                launched=1
                                break
                        fi
                        sleep 1
                        count=$((count + 1));
                done
    

    Глядя на это, я бы сказал, что хранение не является серьезной проблемой, поскольку скрипт копирует /dev/null в журнал каждый раз при запуске Wildfly. И поскольку он ищет заданный код «JBAS015874», чтобы узнать, что сервер работает, если вы не хотите удалять весь свой server.log при каждой загрузке, вам также придется переписать этот бит (или он найдет эту строку из предыдущие стартапы!).

    Итак, если вы не хотите переписывать все сценарии инициализации, я бы просто смирился с этим.

    В любом случае приложения не должны выходить из стандартного выхода. Единственное, что я вижу там после того, как wildfly запущен и работает, - это неперехваченные исключения времени выполнения...

    12.05.2016
  • хранилище не является серьезной проблемой, поскольку скрипт копирует /dev/null в журнал каждый раз, когда запускается Wildfly, это верно только в том случае, если вы часто перезапускаете его. Когда у вас всегда работает станция (для непрерывной службы), где вы можете настроить максимальный размер или дату удаления? 05.10.2016

  • 4

    В корневом регистраторе в подсистеме domain:logging:3.0 закомментируйте

    <handler name="CONSOLE"/> as below 
    
    <!--handler name="CONSOLE"/-->
    

    После этого перезапустите службу Wildfly. Журнал stdout больше не будет записываться. Надеюсь это поможет

    15.07.2019
    Новые материалы

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

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..