Apache2 मेरी एन्वार फाइल का सम्मान क्यों नहीं करता है?


17

मेरी envvar फ़ाइलों में ये पंक्तियाँ हैं:

export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data

मेरे Apache2.conf में ये पंक्तियाँ हैं:

# These need to be set in /etc/apache2/envvars
User ${APACHE_RUN_USER}
Group ${APACHE_RUN_GROUP}

लेकिन जब मैं दौड़ता apache2 -Mहूं तो मुझे यह मिलता है:

apache2: bad user name ${APACHE_RUN_USER}

एक अस्थायी सुधार हार्ड कोड www-dataमें यह मेरी apache2.conf फ़ाइल है। यहाँ कुछ अटकलें थीं कि ऐसा इसलिए था क्योंकि कुछ विन्यास स्क्रिप्ट ने मेरी Apache2.conf फ़ाइल में env var को सही ढंग से प्रतिस्थापित नहीं किया था। भले ही मैं अपने envvars फ़ाइल से परामर्श करने के लिए apache2 कैसे प्राप्त करूं?

एक अन्य डेटा बिंदु के रूप में यह साइट इंगित करती है कि एन्वारर्स बिल्ड में उत्पन्न होता है, लेकिन अपाचे 2 एसटीएल द्वारा रनटाइम पर पढ़ा जाता है, यह सुझाव देता है कि यह फाइल बिल्ड प्रोसेस द्वारा केवल क्रॉप बचे हुए नहीं है।

जवाबों:


30

@Lekensteyn द्वारा दिए गए उत्तर को देखने के बाद, मैंने sudo apache2ctl -Mअपने apache2.conf के साथ मूल की ओर लौटने की कोशिश की । यह काम किया है तो मैं आदमी पृष्ठों में थोड़ा खोदा। यहाँ क्या man apache2कहना है:

In  general, apache2 should not be invoked directly, but rather should 
be invoked via /etc/init.d/apache2 or apache2ctl. The default Debian 
configuration requires environment variables that are defined in 
/etc/apache2/envvars  and  are  not  available  if  apache2  is  
started  directly. However, apache2ctl can be used to pass arbitrary 
arguments to apache2.

तो, इस प्रश्न का उत्तर है: आप apache2सही तरीके से उपयोग नहीं कर रहे हैं ; apache2ctlइसके बजाय का उपयोग करें ।

धन्यवाद मुझे सही दिशा में इंगित करने के लिए @Lekensteyn।


: और भी अधिक सही तरीका initscript का उपयोग कर जाएगा sudo stop apache2, sudo restart apache2और sudo start apache2( /etc/init.d/apache2 stop, आदि)
Lekensteyn

मेरे मामले में मैं umaskएन्वारर्स के लिए एक सेटिंग जोड़ रहा था , और apache2ctl restartइसका उपयोग करने के बाद पुनः आरंभ करने के बाद भी काम नहीं किया, लेकिन फिर से service apache2 restartकाम करना शुरू किया ( service apache2 gracefulनहीं)।
मैट ब्राउन

यह अपाचेक्टल के बजाय सेवा के उपयोग की अनुशंसा करता है, लेकिन यदि आपको कमांड का उपयोग करने की आवश्यकता है, तो यह एपाचेक्टल -एस की तरह सेवा कमांड से जुड़ा नहीं है ... यह उत्तर बहुत अच्छा है। upvote
फ़िदा किला

FYI करें: /etc/init.d apache2 reloadenvvars
वसीयतनामा

7

से http://httpd.apache.org/docs/2.2/configuring.html :

शेल पर्यावरण चर के मूल्यों को सिंटैक्स $ {ENVVAR} का उपयोग करके कॉन्फ़िगरेशन फ़ाइल लाइनों में उपयोग किया जा सकता है। यदि "ENVVAR" एक मान्य पर्यावरण चर का नाम है, तो उस चर का मान विन्यास फाइल लाइन में उस स्थान पर प्रतिस्थापित किया जाता है, और प्रसंस्करण जारी रहता है जैसे कि पाठ सीधे विन्यास फाइल में पाया गया था। (यदि ENVVAR चर नहीं मिला है, तो वर्ण फ़ाइल प्रसंस्करण में बाद के चरणों के उपयोग के लिए "$ {ENVVAR}" अक्षर अपरिवर्तित रह गए हैं।)

तो, चर वास्तव में अपेक्षित रूप से पर्यावरण से पुनर्प्राप्त किया जाता है। अब ऐसा कहां होता है?

में /etc/init.d/apache2, फ़ाइल APACHE_ENVVARSके पथ पर सेट envvarsकिया जाता है जो कि इनस्क्रिप्टस्क्रिप्ट पथ पर आधारित है। यह आमतौर पर APACHE_ENVVARS=/etc/apache2/envvarsसेट होने के परिणामस्वरूप होता है । अब, चूंकि यह मान सेट किए गए डिफ़ॉल्ट मानों के बराबर है apache2ctl, इसलिए इसे निर्यात नहीं किया जाता है।

से /usr/sbin/apache2ctl:

# the path to the environment variable file
test -z "$APACHE_ENVVARS" && APACHE_ENVVARS="$APACHE_CONFDIR/envvars"
# pick up any necessary environment variables
if test -f $APACHE_ENVVARS; then
  . $APACHE_ENVVARS
fi

स्पष्टीकरण: यदि APACHE_ENVVARSखाली है, तो डिफ़ॉल्ट पथ का उपयोग करें जो है /etc/apache2/envvars। यदि यह फ़ाइल मौजूद है, तो इसे "स्रोत" करें (मौजूदा वातावरण में उस फ़ाइल से कमांड निष्पादित करें)।

सुनिश्चित करें कि envvarsफ़ाइल में कोई सिंटैक्स त्रुटि नहीं है। ऐसा चेक करने के लिए, उपयोग करें:

sh -n /etc/apache2/envvars && echo Syntax OK || echo FAIL

यदि कोई हो तो त्रुटियां मुद्रित की जाती हैं।


मैंने चेक का प्रदर्शन किया और सत्यापित कर सकता हूं कि मेरे एन्वार में कोई सिंटैक्स त्रुटियां नहीं हैं। मुझे एक उपाय मिला; मेरा जवाब नीचे देखें।
एवरी चान
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.