2011-09-15 4 views
2

Java Servlet Wrapper (tanukisoftware)를 사용하여 centos Linux 시스템에서 Java Server를 실행하고 있습니다. 내 Java 코드는 System.getenv를 사용하여 몇 가지 환경 변수에 액세스합니다.Linux 용 Java Service Wrapper가 환경 변수를 찾을 수 없습니다.

래퍼를 사용하지 않고 프로그램을 실행하면 (예 : 개미처럼) 내 환경 변수에 액세스 할 수 있지만 래퍼를 통해 수행 할 때 서비스 XX 콘솔

그래서 나는 wrapper.conf에 정의한 속성을 포기하고 정의했습니다. 이것은 자바 코드의 환경 문제를 해결했다.

하지만 내 log4j.xml에도 환경 변수 참조가 있다는 것을 알았습니다. 래퍼를 통해 환경 변수를 사용할 수 없으므로 로깅 기능이 작동하지 않습니다.

그래서 래퍼를 통해 환경 변수를 사용할 수 있도록 해결해야합니다.

흥미롭게도 내 wrapper.conf는 서비스로 실행될 때 Windows 컴퓨터에서 작동하며 환경 변수에 액세스 할 수 있습니다 ... Linux 환경에서 작동하지 않습니다.

두 환경 모두에 사용하는 아래 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 도구가 사용할 환경 변수가 있기 때문에 log4j.xml은 더 이상 작동하지 않습니다 ... wrapper.conf에 정의 된 속성을 어떻게 수정합니까? – FatherFigure

+0

'wrapper.conf' 파일에 다음과 같이 입력하면 log4j가이를 가져옵니다 : 'wrapper.java.additional.11 = -DlogToken = MyLog' 다음과 같은 자리 표시자를 사용할 때이 토큰이 로그됩니다 : '$ {logToken}' – lauwie

0

어떤 자바 버전을 사용하고 있습니까?

1.3에서 getenv는 더 이상 사용되지 않지만 1.5에서 복원되었습니다.

돌아 오는 System.getenv ("xxx")는 무엇입니까?
나뿐만 아니라 일반적인 것들 (예 : PATH 등)이 정의한 변수를 찾지 못합니까?

건배

+0

Java 6. 모든 환경 변수를 찾을 수 없습니다. – FatherFigure

+0

그러면 애플리케이션을 어떻게 시작 하시겠습니까? 데몬으로? 프로세스를 실행하는 사용자가 env를 올바르게 설정했는지 확인하십시오. wrapper.debug = true로 설정하면 래퍼가 현재 환경 전체를 출력합니다 (3.5.6 생각 필요). 너도 이걸 시험해 볼 수 있니? – Naytzyrhc

+0

JSW와 함께 제공되며 데몬으로 시작하는 리눅스 스크립트를 사용하고 있습니다. 나는 wrapper.debug를 시도하고 내가 찾을 수있는 것을 보게 될 것이다. – FatherFigure

0

Linux에서는 환경 변수가 표시되지 않습니다. /etc/init.d 스크립트를 직접 호출하여 애플리케이션을 실행 해보십시오. 그것은 작동해야합니다. 서비스 명령이 환경 변수를 다시 설정하므로 서비스가 항상 일관된 환경에서 실행됩니다.

0

yajsw-beta-12.05 버전에서 같은 문제가 발생했습니다.

그래서 (내가 똑같이 중요하다) 우연히 발견했다 : .sh 파일을 사용하여 java -jar wrapper을 호출하고 ... 환경 변수를 내보내고있었습니다. 그 env 변수는 앱에서 볼 수 없었습니다. 그것이 내 수색이 시작된 곳입니다.

설치 제거 및 모두 같은 래퍼 스크립트를 사용하고 있지 않습니다. 차라리 직접 wrapper.jar를 사용하고 yajsw가 아주 잘린 버전을 사용하고 있습니다. 그래서 거기에 환경 변수를 전달해야했습니다. 내 변수가 동적 값을 갖기 때문에 {wrapper.java.additional} 방법을 선택하지 않았습니다. {wrapper.app.env.key1 = value1}을 살펴본 결과 실제로 환경 변수가 app에 제공됩니다.하지만 동적 인 값을 원했습니다.

궁극적으로 내가 알아 낸 것은 내 wrapper.conf 파일에 wrapper.app.env.DUMMY=value과 같은 임의의 항목이 있다면 Linux 셸 스크립트의 모든 내 보낸 변수가 응용 프로그램에 표시됩니다.

희망이 있으면 도움이됩니다.

관련 문제