टॉमकैट JAVA_HOME को मान्यता नहीं देता है


15

मैंने Ubuntu 14.04 सर्वर स्थापित किया है, JDK1.8u5 और Tomcat7 को निकाला है, और निम्नलिखित को .profile में जोड़ा है (मैंने भी .bashrc के समान [गैर-] परिणामों के साथ इसे जोड़ने की कोशिश की):

export JAVA_HOME=/opt/java/jdk1.8.0_05
export PATH=$PATH:$JAVA_HOME/bin

जब मैं दौड़ता echo $JAVA_HOMEहूं तो मुझे अपेक्षित परिणाम मिलता है /opt/java/jdk1.8.0_05। मैं भी चला सकता हूं java -versionऔर जावा से सही प्रतिक्रिया प्राप्त कर सकता हूं । अब तक तो सब ठीक है।

तो अब मैं Tomcat को स्टार्टअप करने की कोशिश करता हूं (यह भी catalina.sh की कोशिश की), और मुझे निम्नलिखित मिलते हैं:

user@ubuntu:~$ sudo /opt/tomcat7/apache-tomcat-7.0.53/bin/startup.sh
Neither the JAVA_HOME nor the JRE_HOME environment variable is defined
At least one of these environment variable is needed to run this program

लेकिन ... मैं सिर्फ कोशिश की echo $JAVA_HOMEऔर यह काम किया?

जवाबों:


23

इसमें एक मदद पाठ है catalina.sh। मैं इसे यहाँ उद्धृत करूंगा:

#   Do not set the variables in this script. Instead put them into a script
#   setenv.sh in CATALINA_BASE/bin to keep your customizations separate.

#
#   JAVA_HOME       Must point at your Java Development Kit installation.
#                   Required to run the with the "debug" argument.

# Ensure that any user defined CLASSPATH variables are not used on startup,
# but allow them to be specified in setenv.sh, in rare case when it is needed.
CLASSPATH=

if [ -r "$CATALINA_BASE/bin/setenv.sh" ]; then
  . "$CATALINA_BASE/bin/setenv.sh"
elif [ -r "$CATALINA_HOME/bin/setenv.sh" ]; then
  . "$CATALINA_HOME/bin/setenv.sh"
fi

जब आप tomcatउपयोग करना शुरू करते हैं catalina.sh, तो यह फ़ाइल को खोजता है setenv.shऔर इसे सोर्स करता है। यह में खोज कर रहा है CATALINA_HOMEया CATALINA_BASE

तो सेट करने के लिए बेहतर तरीका JAVA_HOMEके लिए tomcatहै:

  1. setenv.shफ़ोल्डर में नामित स्क्रिप्ट बनाएं CATALINA_BASE/bin, अगर यह पहले से मौजूद नहीं है।
  2. इस लाइन को जोड़ें setenv.sh

    export JAVA_HOME=/opt/java/jdk1.8.0_05
  3. इसे अमल में लाएं।


आपको इस समाधान का उपयोग क्यों करना चाहिए:

स्क्रिप्ट में पर्यावरण चर सेट करना अधिक सुरक्षित है। हमेशा यथासंभव स्थानीय रूप से चर सेट करने का प्रयास करें। का उपयोग नहीं करते की कोशिश करो /etc/environment, /etc/profileऔर दूसरों यदि आप वास्तव में नहीं है की जरूरत है Global Environment Variable। स्थापना JAVA_HOMEमें setenv.shआप विभिन्न अनुप्रयोगों के विभिन्न संस्करण की आवश्यकता है कि के साथ विभिन्न tomcats का उपयोग करने की क्षमता देता javaहै, लेकिन एक के द्वारा चल रहा है। अन्य उपयोगकर्ता पर्यावरण आपके द्वारा प्रभावित नहीं होंगे।


4

चूंकि आपने अपने स्वयं के उपयोगकर्ता के लिए पर्यावरण चर निर्धारित किया है और सुपरयुसर के लिए नहीं, आपके पास दो विकल्प हैं:

  1. आपको -Eनिम्नानुसार चर का उपयोग कर निर्यात करना होगा :

    sudo -E /opt/tomcat7/apache-tomcat-7.0.53/bin/startup.sh

    ध्यान दें कि यह कमांड चलाते समय सभी पर्यावरण चर निर्यात करेगा। जब आप कमांड को रूट के रूप में चलाते हैं, तो यह सामान्य उपयोगकर्ताओं के वातावरण से बाहर नहीं है। यह वांछनीय नहीं है।

  2. चर को रूट की.bashrc /etc/enviroment फ़ाइल में निर्यात करें । एक टर्मिनल खोलें और टाइप करें:

    sudo nano /etc/environment

    और अपना प्रशासनिक पासवर्ड दर्ज करें, और फ़ाइल के अंत में निम्नलिखित पंक्तियाँ जोड़ें:

    JAVA_HOME=/opt/java/jdk1.8.0_05
    PATH=$PATH:$JAVA_HOME/bin

    और फिर

    source /etc/environment

    या अपनी मशीन को पुनः आरंभ करें और फिर आपके द्वारा उपयोग की जा रही कमांड को पुनः प्रयास करें।


अपडेट करें:

इस उत्तर ने संकेत दिया कि दो क्यों चरण 2 काम नहीं sudoकरेंगे, पर्यावरण को रीसेट करेंगे और एक सुरक्षित मार्ग प्रदान करेंगे, इसलिए सभी वैश्विक चर रीसेट किए जाते हैं। वर्कअराउंड का उपयोग करना होगा

sudo su

और फिर कमांड को निष्पादित करें जो सेट किए गए पर्यावरण चर का उपयोग करता है।


1
धन्यवाद @ जॉबिन - विकल्प 1 काम करता है इसलिए मैंने आपके उत्तर को बढ़ा दिया। मैं अब विकल्प 2 की जांच करूंगा, जो मेरा पसंदीदा समाधान है, और यदि यह काम करता है तो मैं आपके उत्तर को स्वीकार करूंगा।

/root/.bashrcजैसा कि आपने सुझाव दिया था, मैंने नैनो के साथ आज्ञाओं को जोड़ा , लेकिन user@ubuntu:~$ source /root/.bashrcपरिणामों को बुलाकर -bash: /root/.bashrc: Permission deniedऔर सूडो पैदावार के साथ आजमाया sudo: source: command not found। इस बिंदु पर मूल कमांड को पुनः प्राप्त करना मुझे वापस 0.
isapir

@ भाग: उस मुद्दे को हल करने के लिए मेरे जवाब को संपादित किया, आपको sudo -iपहले आपके सामने उपयोग करना चाहिए source। यह बात बताने के लिए धन्यवाद।
जॉब

ठीक है, नौसिखिया सवालों को क्षमा करें, लेकिन sudo -iएक बार It नामक स्रोत से कैसे बाहर निकलूं? बाहर निकलने के बिना मुझे मूल त्रुटि संदेश मिल रहा है ...
isapir

@ भाग: बस Ctrl + d या टाइप दबाएं exit
जॉब

0

मैं जिस समाधान की तलाश कर रहा था, वह है /etc/environment, जैसा कि एन्वायर्नमेंट वेरिएबल्स में निर्दिष्ट किया गया है , स्क्रिप्ट की प्रक्रिया नहीं करता है और चर का विस्तार नहीं करता है, इसलिए निम्नलिखित ( निर्यात के बिना ) को जोड़ दिया है :

JAVA_HOME=/opt/java/jdk1.8.0_05

फिर मैंने परिवर्तनों को प्रभावित करने के लिए सिस्टम को रिबूट किया।


0

मैंने JAVA_HOME को tomcat7.serviceस्क्रिप्ट में जोड़ा क्योंकि setenv.shइससे कोई खटास नहीं थीcatalina.sh

कदम:

1.Op tomcat7 सर्विस स्क्रिप्ट फ़ाइल

sudo gedit /etc/init.d/tomcat7

2. सेट JAVA_HOME

.
.
.
JAVA_HOME=/usr/lib/jvm/java-8-oracle

# Directory where the Tomcat 6 binary distribution resides
CATALINA_HOME=/usr/share/$NAME

# Directory for per-instance configuration files and webapps
CATALINA_BASE=/var/lib/$NAME

# Use the Java security manager? (yes/no)
TOMCAT7_SECURITY=no

3.Start tomcat7 सेवा

sudo service tomcat7 status

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.