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

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

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

./myapp start Параметр1 параметр2

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

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


person Jake    schedule 14.06.2010    source источник


Ответы (3)


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

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

откройте скрипт и в console(), start() (и, возможно, launchinternally()) установите для 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 $@"

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

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

в 'консоли', 'пуске' (и '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
    ;;

.. 'внутренний запуск')

    shift
    launchdinternal $@
    ;;

после этого вы можете вызвать скрипт следующим образом:

./script start|console -- para1 para2 ...

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

привет, Кристиан

person Naytzyrhc    schedule 31.08.2010

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

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

Привет, Лейф

person Leif Mortenson    schedule 11.12.2010

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

То, что вы хотите сделать, должно быть таким же простым, как убедиться, что $@ передается сценарием в процесс java. В Bash $@ — это массив, содержащий все аргументы, переданные в сценарий. Если оболочка, созданная оболочкой службы java, требует, чтобы вы передали «start» в качестве одного из аргументов, вам, возможно, придется добавить немного сценария, чтобы передать все аргументы, кроме первого, в процесс java.

person matt b    schedule 14.06.2010