Оболочка сервиса Java и дополнительные параметры командной строки приложения

В настоящее время я использую java-сервис-обертку для упаковки Java-приложения, которое я разработал. Мне нужна возможность передавать дополнительные параметры командной строки моему приложению через оболочку java-сервиса.

Притворимся, что мое приложение называется myapp, и я настроил упаковщик java-сервиса, чтобы скрипт, который я запускаю, запускался под названием myapp. Я хотел бы иметь возможность сделать что-то вроде этого:

./myapp start Parameter1 параметр2

и эти дополнительные параметры будут переданы в мое приложение. Есть идеи, как это сделать? Я обнаружил, что поиск в Google и изучение документации - это лишь изучение способов использования аргументов командной строки для установки оболочки службы Java. Мне было трудно найти что-либо о передаче аргументов командной строки в ваше приложение, за исключением того, что они жестко запрограммированы в вашем файле wrapper.conf.

Сейчас я чувствую, что мой вариант - взять дополнительные параметры командной строки, установить их в переменные окружения и жестко запрограммировать их в файле wrapper.conf. Я предпочел бы не идти по этому пути, хотя и надеюсь, что я что-то упустил.

3 ответа

В выпуске обертки 3.5.2 мы добавили возможность достичь того, о чем вы просите, используя "-" перед параметрами в приложении java: https://sourceforge.net/tracker/?func=detail&aid=3017567&group_id=39428&atid=425190

это в основном работает для непосредственного вызова двоичного файла оболочки, но для сценария оболочки вы можете легко добиться того же самого, немного изменив его:

откройте сценарий и в консоли () запустите () (и, при желании, запустите внутренне ()), установите для command_line следующее:

    COMMAND_LINE="$CMDNICE \"$WRAPPER_CMD\" \"$WRAPPER_CONF\" wrapper.syslog.ident=\"$APP_NAME\" wrapper.pidfile=\"$PIDFILE\" wrapper.name=\"$APP_NAME\" wrapper.displayname=\"$APP_LONG_NAME\" $ANCHORPROP $STATUSPROP $LOCKPROP $@"

обратите внимание на $@ в конце.

Теперь перейдите к концу скрипта, где он решает, какую функцию он должен вызывать (консоль, запуск, остановка, перезапуск и т. д.).

в 'console', 'start' (и 'launchdinternal') установите смещение и передайте параметры из командной строки в функцию:

'console')
    checkUser touchlock $1
    shift
    console $@
    ;;

'start')
    if [ "$DIST_OS" = "macosx" -a -f "/Library/LaunchDaemons/${APP_PLIST}" ] ; then
        macosxstart
    else
        checkUser touchlock $1
        shift
        start $@
    fi
    ;;

.. 'launchdinternal')

    shift
    launchdinternal $@
    ;;

после этого вы можете вызвать скрипт так:

./script начало | консоль - para1 para2 ...

Надеюсь, что это помогает вам.

ура, Кристиан

Джейк, быстрое продолжение. В версии 3.5.5 сценария оболочки Java Service Wrapper мы добавили новую опцию PASS_THROUGH вверх, которая теперь позволяет передавать аргументы командной строки в JVM из коробки.

Скрипт использует параметр командной строки "-", который Кристиан упоминал еще в августе.

Ура, лейф

Можете ли вы опубликовать пример того, как выглядит скрипт "myapp"? Не все, но было бы полезно увидеть, какая часть запускает java процесс выглядит так.

То, чего вы хотите достичь, должно быть таким же простым, как $@ передается в java процесс по сценарию. В Баше $@ это массив, который содержит все аргументы, переданные в сценарий. Если оболочка, созданная оболочкой службы java, требует, чтобы вы указали "start" в качестве одного из аргументов, вам, возможно, придется добавить немного сценариев, чтобы передать все аргументы, но первый - java процесс.

Другие вопросы по тегам