2010-06-14 66 views
4

我目前使用java service wrapper來包裝我開發的Java應用程序。我需要能夠通過java服務包裝器將其他命令行參數傳遞給我的應用程序。Java服務包裝器和其他應用程序命令行參數

假裝我的應用程序被稱爲myapp,並且我已經安裝了java服務包裝程序,以便我開始運行的腳本稱爲myapp。我希望能夠做這樣的事情:

./myapp啓動參數1參數

,並將這些額外的參數得到傳遞給我的應用程序。任何想法如何做到這一點?我發現使用googling並查看文檔只是拉起如何使用命令行參數來設置Java服務包裝。我很難找到關於將命令行參數傳遞給應用程序的任何信息,除非將它們硬編碼到wrapper.conf文件中。

現在我覺得我的選擇是採取額外的命令行參數,將它們設置爲環境變量,並將這些參數硬編碼到wrapper.conf中。我寧願不走那條路,但希望我忽略了一些東西。

回答

0

你可以發佈一個「myapp」腳本的樣子嗎?不是全部,但是看看啓動java進程的部分是什麼樣子會很有用。

你想完成的工作應該與確保[email protected]被腳本傳遞到java過程一樣簡單。在Bash中,[email protected]是一個包含傳遞給腳本的所有參數的數組。如果由java服務包裝器生成的包裝器需要您將「start」作爲參數之一傳入,那麼您可能需要添加一些腳本來將除第一個之外的所有參數傳遞給java進程。

4
在3.5.2版本包裝的

,我們增加了一個可能性,以達到你所要求的,通過使用「 - 」來參數先於Java應用程序: https://sourceforge.net/tracker/?func=detail&aid=3017567&group_id=39428&atid=425190

,這是基本的工作直接調用包裝的二進制文件,但對於shell腳本,您可以通過修改它輕鬆實現:

打開腳本並在控制檯(),start()(和可選的launchdinternally())中設置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 [email protected]" 

注意最後的$ @。

現在,轉到腳本,它決定功能,它應該叫什麼(控制檯,啓動,停止,重新啓動等)

相當年底在「控制檯」,「開始」(和'launchdinternal')設置的移位,並從命令行越過參數給該函數:

'console') 
    checkUser touchlock $1 
    shift 
    console [email protected] 
    ;; 

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

.. 'launchdinternal')之後

shift 
    launchdinternal [email protected] 
    ;; 

,你可以這樣調用腳本:

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

希望這可以幫助你。

歡呼聲, 基督教

1

傑克, 快速隨訪。在Java Service Wrapper的shell腳本的3.5.5版本中,我們向頂部添加了一個新的PASS_THROUGH選項,該選項現在將命令行參數傳遞給開箱即用的JVM。

該腳本利用了Christian在8月份提到的「 - 」命令行參數。

乾杯, 萊夫