2011-09-15 13 views
2

私はJava Service Wrapper(tanukisoftware)を使用して、Javaサーバーをcentos Linuxマシン上で実行しています。私のJavaコードは、System.getenvを使用していくつかの環境変数にアクセスします。Linux用Javaサービスラッパーは環境変数を見つけることができません

ラッパーなしでプログラムを実行すると(ant runのように)私は自分の環境変数にアクセスできますが、ラッパーを使ってアクセスするとサービスは実行できません

私はあきらめて、wrapper.confで定義したプロパティを代わりに定義しました。これは、Javaコード内の私の環境問題を解決しました。

しかし、私は私のlog4j.xmlにもいくつかの環境変数の参照があることに気付きました。そしてラッパーを通して環境変数が利用できないので、私のログは機能しません。

私は解決し、環境変数をラッパーから利用できるようにしなければなりません。

興味深いことに、私のwrapper.confは、サービスとして動作しているときにWindowsマシン上で動作し、環境変数にアクセスできます...そのLinuxのenvでは動作しません。

以下の両方の環境で使用するwrapper.confを以下に示します。

 #encoding=UTF-8 
     # Configuration files must begin with a line specifying the encoding 
     # of the the file. 

     #******************************************************************** 
     # Wrapper License Properties (Ignored by Community Edition) 
     #******************************************************************** 
     # Professional and Standard Editions of the Wrapper require a valid 
     # License Key to start. Licenses can be purchased or a trial license 
     # requested on the following pages: 
     # http://wrapper.tanukisoftware.com/purchase 
     # http://wrapper.tanukisoftware.com/trial 

     # Include file problems can be debugged by removing the first '#' 
     # from the following line: 
     ##include.debug 

     # The Wrapper will look for either of the following optional files for a 
     # valid License Key. License Key properties can optionally be included 
     # directly in this configuration file. 
     #include ../conf/wrapper-license.conf 
     #include ../conf/wrapper-license-%WRAPPER_HOST_NAME%.conf 

     # The following property will output information about which License Key(s) 
     # are being found, and can aid in resolving any licensing problems. 
     #wrapper.license.debug=TRUE 

     #******************************************************************** 
     # Wrapper Localization 
     #******************************************************************** 
     # Specify the locale which the Wrapper should use. By default the system 
     # locale is used. 
     #wrapper.lang=en_US # en_US or ja_JP 

     # Specify the location of the Wrapper's language resources. If these are 
     # missing, the Wrapper will default to the en_US locale. 
     wrapper.lang.folder=../lang 

     #******************************************************************** 
     # Wrapper Java Properties 
     #******************************************************************** 
     # Java Application 
     # Locate the java binary on the system PATH: 
     wrapper.java.command=java 
     # Specify a specific java binary: 
     #set.JAVA_HOME=/java/path 
     #wrapper.java.command=%JAVA_HOME%/bin/java 

     # Tell the Wrapper to log the full generated Java command line. 
     wrapper.java.command.loglevel=INFO 

     # Java Main class. This class must implement the WrapperListener interface 
     # or guarantee that the WrapperManager class is initialized. Helper 
     # classes are provided to do this for you. See the Integration section 
     # of the documentation for details. 
     wrapper.java.mainclass=org.tanukisoftware.wrapper.WrapperSimpleApp 

     # Java Classpath (include wrapper.jar) Add class path elements as 
     # needed starting from 1 
     wrapper.java.classpath.1=../lib/wrapper.jar 
     wrapper.java.classpath.2=../bin/ventsimulator.jar 
     wrapper.java.classpath.3=../lib/netty-3.2.4.Final-sources.jar 
     wrapper.java.classpath.4=../lib/netty-3.2.4.Final.jar 
     wrapper.java.classpath.5=../lib/theronyxutils.jar 


     # Java Library Path (location of Wrapper.DLL or libwrapper.so) 
     wrapper.java.library.path.1=../lib 

     # Java Bits. On applicable platforms, tells the JVM to run in 32 or 64-bit mode. 
     wrapper.java.additional.auto_bits=TRUE 

     # Java Additional Parameters 
     # Wait 4 secs till application initializes. 
     # Make environment variables available as properties as an option, because on linux somehow the ENV variables are not available, through wrapper 
     set.default.MDASJ_HOME_WIN=C:/Projects/MDASJ/code/mdasj-core/MDASJ 
     set.default.MDASJ_PROJECTS_WIN=C:/Projects/MDASJ/code 
     set.default.MDASJ_HOME_LINUX=/opt/mdasjroot/MDASJ 
     set.default.MDASJ_PROJECTS_LINUX=/opt/mdasjroot 


     wrapper.java.additional.1=-Dorg.tanukisoftware.wrapper.WrapperSimpleApp.maxStartMainWait=4 
     wrapper.java.additional.2=-DMDASJ_HOME_WIN=%MDASJ_HOME_WIN% 
     wrapper.java.additional.3=-DMDASJ_PROJECTS_WIN=%MDASJ_PROJECTS_WIN% 
     wrapper.java.additional.4=-DMDASJ_HOME_LINUX=%MDASJ_HOME_LINUX% 
     wrapper.java.additional.5=-DMDASJ_PROJECTS_LINUX=%MDASJ_PROJECTS_LINUX% 


     # Initial Java Heap Size (in MB) 
     #wrapper.java.initmemory=3 

     # Maximum Java Heap Size (in MB) 
     #wrapper.java.maxmemory=64 

     # Application parameters. Add parameters as needed starting from 1 
     wrapper.app.parameter.1=com.theronyx.simulator.SimulatorManager 

     #******************************************************************** 
     # Wrapper Logging Properties 
     #******************************************************************** 
     # Enables Debug output from the Wrapper. 
     # wrapper.debug=TRUE 

     # Format of output for the console. (See docs for formats) 
     wrapper.console.format=PM 

     # Log Level for console output. (See docs for log levels) 
     wrapper.console.loglevel=INFO 

     # Log file to use for wrapper output logging. 
     wrapper.logfile=%MDASJ_PROJECTS%/log/ventsimulator-wrapper.log 

     # Format of output for the log file. (See docs for formats) 
     wrapper.logfile.format=LPTM 

     # Log Level for log file output. (See docs for log levels) 
     wrapper.logfile.loglevel=INFO 

     # Maximum size that the log file will be allowed to grow to before 
     # the log is rolled. Size is specified in bytes. The default value 
     # of 0, disables log rolling. May abbreviate with the 'k' (kb) or 
     # 'm' (mb) suffix. For example: 10m = 10 megabytes. 
     wrapper.logfile.maxsize=0 

     # Maximum number of rolled log files which will be allowed before old 
     # files are deleted. The default value of 0 implies no limit. 
     wrapper.logfile.maxfiles=0 

     # Log Level for sys/event log output. (See docs for log levels) 
     wrapper.syslog.loglevel=NONE 

     #******************************************************************** 
     # Wrapper General Properties 
     #******************************************************************** 
     # Allow for the use of non-contiguous numbered properties 
     wrapper.ignore_sequence_gaps=TRUE 

     # Title to use when running as a console 
     wrapper.console.title=OPUS Ventilator Simulator 

     #******************************************************************** 
     # Wrapper JVM Checks 
     #******************************************************************** 
     # Detect DeadLocked Threads in the JVM. (Requires Standard Edition) 
     wrapper.check.deadlock=TRUE 
     wrapper.check.deadlock.interval=60 
     wrapper.check.deadlock.action=RESTART 
     wrapper.check.deadlock.output=FULL 

     # Out Of Memory detection. 
     # (Simple match) 
     wrapper.filter.trigger.1000=java.lang.OutOfMemoryError 
     # (Only match text in stack traces if -XX:+PrintClassHistogram is being used.) 
     #wrapper.filter.trigger.1000=Exception in thread "*" java.lang.OutOfMemoryError 
     #wrapper.filter.allow_wildcards.1000=TRUE 
     wrapper.filter.action.1000=RESTART 
     wrapper.filter.message.1000=WRAPPER detected java.lang.OutOfMemoryError.....The JVM has run out of memory... RESTARTING 

     #******************************************************************** 
     # Wrapper Email Notifications. (Requires Professional Edition) 
     #******************************************************************** 
     # Common Event Email settings. 
     #wrapper.event.default.email.debug=TRUE 
     #wrapper.event.default.email.smtp.host=<SMTP_Host> 
     #wrapper.event.default.email.smtp.port=25 
     #wrapper.event.default.email.subject=[%WRAPPER_HOSTNAME%:%WRAPPER_NAME%:%WRAPPER_EVENT_NAME%] Event Notification 
     #wrapper.event.default.email.sender=<Sender email> 
     #wrapper.event.default.email.recipient=<Recipient email> 

     # Configure the log attached to event emails. 
     #wrapper.event.default.email.attach_log=TRUE 
     #wrapper.event.default.email.maillog.lines=50 
     #wrapper.event.default.email.maillog.format=LPTM 
     #wrapper.event.default.email.maillog.loglevel=INFO 

     # Enable specific event emails. 
     #wrapper.event.wrapper_start.email=TRUE 
     #wrapper.event.jvm_prelaunch.email=TRUE 
     #wrapper.event.jvm_start.email=TRUE 
     #wrapper.event.jvm_started.email=TRUE 
     #wrapper.event.jvm_deadlock.email=TRUE 
     #wrapper.event.jvm_stop.email=TRUE 
     #wrapper.event.jvm_stopped.email=TRUE 
     #wrapper.event.jvm_restart.email=TRUE 
     #wrapper.event.jvm_failed_invocation.email=TRUE 
     #wrapper.event.jvm_max_failed_invocations.email=TRUE 
     #wrapper.event.jvm_kill.email=TRUE 
     #wrapper.event.jvm_killed.email=TRUE 
     #wrapper.event.jvm_unexpected_exit.email=TRUE 
     #wrapper.event.wrapper_stop.email=TRUE 

     # Specify custom mail content 
     wrapper.event.jvm_restart.email.body=The JVM was restarted.\n\nPlease check on its status.\n 

     #******************************************************************** 
     # Wrapper Windows NT/2000/XP Service Properties 
     #******************************************************************** 
     # WARNING - Do not modify any of these properties when an application 
     # using this configuration file has been installed as a service. 
     # Please uninstall the service before modifying this section. The 
     # service can then be reinstalled. 

     # Name of the service 
     wrapper.name=VentSimulator 

     # Display name of the service 
     wrapper.displayname=OPUS Vent Simulator 

     # Description of the service 
     wrapper.description=Runs a Vent Simulation program to use with OPUS MDASJ, just for testing purposes 

     # Service dependencies. Add dependencies as needed starting from 1 
     wrapper.ntservice.dependency.1= 

     # Mode in which the service is installed. AUTO_START, DELAY_START or DEMAND_START 
     wrapper.ntservice.starttype=AUTO_START 

     # Allow the service to interact with the desktop. 
     wrapper.ntservice.interactive=false 

答えて

1

パラメータwrapper.java.additional-Dを使用して優雅に;-)

あなたは追加のパラメータを追加することによって、アプリケーションを助ける必要がありますので、あなたはすでに、環境パラメータは、すべての ユーザー/プロセスのために利用できない場合があります知っているかもしれませんが コマンドライン。

+0

はいプロパティを使用しています。しかし、私のlog4j.xmlはもう使用できません。なぜなら、log4jツールが使用するいくつかの環境変数があるからです...これをwrapper.confで定義されたプロパティでどのように修正するのですか? – FatherFigure

+0

これを 'wrapper.conf'ファイルに入れたら、log4jはそれを拾います: ' wrapper.java.additional.11 = -DlogToken = MyLog' 次のようなプレースホルダを使用すると、 '$ {logToken}' – lauwie

0

あなたはどのJavaバージョンを使用していますか?

1.3ではgetenvは廃止されましたが、1.5では回復しました。

System.getenv( "xxx")とは何ですか?
あなたが定義した変数だけでなく、一般的な変数(PATHなど)も見つからないのですか?

歓声

+0

Java 6.それはどんな環境変数も見つけることができません。 – FatherFigure

+0

どのようにアプリケーションを起動していますか?デーモンとして? wrapper.debug = trueを設定した場合、ラッパーは現在の環境全体を出力します(3.5.6が必要です)。あなたもこれを試してくださいできますか? – Naytzyrhc

+0

私はJSWに付属のlinuxスクリプトを使用しており、これをデーモンとして起動しています。私はwrapper.debugを試して、私が見つけることができるものを見てみましょう。 – FatherFigure

0

Linuxでは環境変数が表示されません。 /etc/init.dスクリプトを直接呼び出してアプリケーションを実行してみてください。それは動作するはずです。何が起こるかは、サービスコマンドが環境変数をリセットする(サービスが常に一貫した環境で実行されるように)ことです。

0

yajsw-beta-12.05バージョンで同じ問題が発生しました。

私はそれに遭遇しました(これは同様に重要です):私はjava -jar wrapperを呼び出すために.shファイルを使用していました...そして環境変数をエクスポートしていました。そしてそのenv変数はアプリでは見えませんでした。それが私の検索が始まったところです。

私は、アンインストールアンインストールとすべてのようなラッパースクリプトを使用していません。私はむしろwrapper.jarを直接使用し、yajswの非常にトリムされたバージョンを使用しています。そこで私は環境変数を渡す必要がありました。私の変数は動的な値を持つはずだったので、私は{wrapper.java.additional}に行くことを選択しませんでした。 私は{wrapper.app.env.key1 = value1}を調べましたが、これは実際に環境変数をアプリに提供します。しかし、私は動的な値を持っていたかったのです。

最終的に私が見つけたのは、wrapper.confファイルにwrapper.app.env.DUMMY=valueのようなダミーエントリがあった場合、linuxシェルスクリプトからエクスポートされたすべての変数がアプリケーションに表示されます。

これは誰かを助けることを望みます。

関連する問題