কেন apache2 আমার envvars ফাইলকে সম্মান করে না?


17

আমার এনভ্বর ফাইলগুলিতে এই লাইন রয়েছে:

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

আমার অ্যাপাচি টু কনফের মধ্যে এই লাইন রয়েছে:

# 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 ফাইলটিতে হার্ড-কোড করা। কিছু ফটকা ছিল এখানে যে, এই ছিল কারণ কিছু কনফিগারেশন স্ক্রিপ্ট প্রতিস্থাপন করা হয়নি env আমার apache2.conf ফাইলে সঠিকভাবে Vars। নির্বিশেষে আমি কীভাবে আমার এনভ্যাভার্স ফাইলের সাথে পরামর্শ করার জন্য অ্যাপাচি 2 পাব?

অন্য ডেটা পয়েন্ট হিসাবে, এই সাইটটি এনভভরগুলি বিল্ডে উত্পন্ন হয়েছে তা নির্দেশ করে বলে মনে হচ্ছে, তবে রানটাইমে অ্যাপাচি 2 সিটিএল দ্বারা পড়া হয়েছে, যা বোঝায় যে এই ফাইলটি বিল্ড প্রক্রিয়া দ্বারা কেবল ছাঁটাইয়ের অবধি নয়।

উত্তর:


30

@ লেকেনস্টেইনের দেওয়া উত্তরটি দেখার পরে, আমি sudo apache2ctl -Mআমার অ্যাপাচি ২.কনফটি মূলটিতে ফিরে যাওয়ার চেষ্টা করেছি। এটি কাজ করেছিল তাই আমি ম্যান পৃষ্ঠাগুলিতে কিছুটা খনন করেছি। এখানে যা 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পরিবর্তে ব্যবহার করুন।

আমাকে সঠিক দিকে নির্দেশ করার জন্য @ লেকেনস্টেইনকে ধন্যবাদ।


: আরও বেশি সঠিক উপায় initscript ব্যবহার করা হবে sudo stop apache2, sudo restart apache2এবং sudo start apache2( /etc/init.d/apache2 stop, ইত্যাদি)
Lekensteyn

আমার ক্ষেত্রে আমি umaskenvvars এ একটি সেটিং যুক্ত করেছিলাম, এবং apache2ctl restartএটি ব্যবহার করে পুনরায় চালু করার পরেও এখনও কাজ করে না, তবে কাজটি পুনরায় চালু করে service apache2 restart(কাজ service apache2 gracefulকরেনি)।
ম্যাট ব্রাউন

এটি অ্যাপাচিেক্টল এর পরিবর্তে পরিষেবাটি ব্যবহারের পরামর্শ দেওয়া হচ্ছে, তবে যদি আপনাকে সার্ভিস কমান্ডের সাথে লিখিত না হয়ে যেমন কমান্ডগুলি যেমন অ্যাপাচিেক্টল-এস ব্যবহার করতে হয় তবে এই উত্তরটি দুর্দান্ত। ভোট দিন
Feida Kila

এফওয়াইআই: করছেন ক /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

যদি ত্রুটিগুলি মুদ্রিত হয়।


আমি চেকটি সম্পাদন করেছি এবং যাচাই করতে পারি যে আমার এনভ্যাভারগুলিতে কোনও সিনট্যাক্স ত্রুটি নেই। আমি একটি সমাধান খুঁজে পেয়েছি; নীচে আমার উত্তর দেখুন।
অ্যাভরি চ্যান
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.