অ্যাপাচি 2 PATH পরিবেশ পরিবর্তনশীল সেট করা হচ্ছে


13

কীভাবে আপনি PATHঅ্যাপাচি 2 এর জন্য পরিবেশের পরিবর্তনশীল সেট করতে পারেন ? আমি এটিকে /usr/sbin/envvarsএবং httpd.conf এ SetEnv PATH(এবং PassEnv সহ এসএসআই-এর সাথে প্রেরণে) সেট করার চেষ্টা করেছি , তবে এটি কেবল বহন করে না।


1
আরও তথ্য লাগবে. এটি প্রশ্নের ওএসের উপর নির্ভর করে। উইন্ডোজ আন * এক্স থেকে আলাদাভাবে কাজ করে। ফ্রিবিএসডি, রেডহ্যাট এবং উবুন্টু সকলেই এটিকে বিভিন্ন ফাইলে হ্যান্ডেল করে।
স্টিফান লাসিউইস্কি

আপনি বলছেন কিছু পন্থা "PATH এর পক্ষে কাজ করে না"। আপনি এটি কীভাবে পরীক্ষা করছেন তা আপনাকে আমাদের দেখাতে হবে।

উত্তর:


15

অন্যরা যেমন বলেছে, আপনি পরিবেশের পরিবর্তনশীল ফাইলটি ব্যবহারের মাধ্যমে এটি করেন। আমি এই উত্তরে আরও বিশদ সরবরাহ করব, এবং প্রমাণ করে যে এটি কার্যকর works

এই পরিবেশের পরিবর্তনশীল ফাইলটি অবশ্যই উত্স হতে হবে apachectl। আমার উবুন্টু বাক্সে, এই ফাইলটি রয়েছে /etc/apache2/envvars। রেডহ্যাটে, এটি এখানে /etc/sysconfig/httpd। ফ্রিবিএসডি-তে, এটি সেট করা আছে /etc/rc.conf(আমার মনে হয়)। বিকল্প হিসাবে, আপনি একটি স্টার্টআপ স্ক্রিপ্ট ( /etc/init.d/httpdবা apachectl, ইত্যাদি) এ এই তথ্য সেট করতে পারেন । তবে আমি মনে করি যদি সম্ভব হয় তবে স্টার্টআপ স্ক্রিপ্টগুলি একা রেখে দেওয়া ভাল। মনোনীত পরিবেশের ভেরিয়েবল স্ক্রিপ্টে সেরা স্থান।

  1. এই এনভর্স ফাইলের অবস্থান যাচাই করুন। উবুন্টুতে, /etc/init.d/apache2ctlএটি উত্স দেখায় /etc/apache2/envvars:

    # the path to the environment variable file
    test -z "$APACHE_ENVVARS" && APACHE_ENVVARS='/etc/apache2/envvars'
    # pick up any necessary environment variables
    if test -f $APACHE_ENVVARS; then
       . $APACHE_ENVVARS
    fi
    
  2. ভেরিয়েবলগুলি দেখতে, আমি পার্ল প্রিন্টিনেভি.সি.পি স্ক্রিপ্ট ব্যবহার করছি এবং এটি http://example.org/cgi-bin/printenv.cgi এ উপলব্ধ করে তুলেছি । স্ক্রিপ্টটি আমাকে নীচের পাঠ্য দেখায়:

    PATH = /usr/local/bin:/usr/bin:/bin
    
  3. এই ভেরিয়েবলগুলি পরিবর্তন করতে, আমি এনভের্স ফাইলটি সম্পাদনা করি:

    $ sudo vim /etc/apache2/envvars 
    
  4. এই ফাইলটিতে আপনার PATH পরিবর্তন করুন। এই উদাহরণে, আমি /opt/local/binআমার পথের সাথে যুক্ত করব। কিছু ক্ষেত্রে, আপনার ব্যবহারের প্রয়োজন হতে পারে export PATHকেবল না PATH:

    export PATH=$PATH:/opt/local/bin
    
  5. অ্যাপাচি পুনরায় চালু করুন

    $ sudo service apache2 restart
     * Restarting web server apache2
     ... waiting    ...done.
    $
    
  6. Http://example.org/cgi-bin/printenv.cgi এ ফলাফল দেখুন , যা এখন দেখায় যে PATH এ এখন একটি নতুন উপাদান রয়েছে:

    PATH = /usr/local/bin:/usr/bin:/bin:/opt/local/bin
    

যদি উপরের কাজ না করে তবে অস্বাভাবিক কিছু ঘটতে পারে। সম্ভবত আপনার স্ক্রিপ্টটি PATH কে অগ্রাহ্য করছে বা ওভাররাইট করছে।


নিশ্চিত হয়ে নিন যে আপনি httpd পুনরায় চালু করেছেন - আমি চেষ্টা করার চেষ্টা করেছি gracefulএবং এর ফলে পরিবর্তনগুলি কার্যকর হয় নি।
মনিকা সেলিওর

ফেডোরা 23 তে: «এই ফাইলটি আর httpd প্রক্রিয়ার জন্য অতিরিক্ত পরিবেশের ভেরিয়েবলগুলি কনফিগার করতে ব্যবহৃত হয় না। এটি সিস্টেমড দ্বারা প্রতিস্থাপন করা হয়েছে » পেস্ট.ডেবিয়ান.net
নিমো


1

আমার সিস্টেমে এটি /etc/apache2/envvars


এটি কাজ করে তবে এর জন্য নয়PATH
মাত্তিও

@ মাত্তিও: এটি কাজ করবে। প্রমাণের জন্য নীচে আমার বিস্তারিত উদাহরণ দেখুন।
স্টিফান লাসিউইস্কি

1

আপনি মোড_এনভি লোড করেছেন তা নিশ্চিত করুন।

সঠিক বাক্য গঠন (উদাহরণ):

SetEnv LD_LIBRARY_PATH /usr/local/lib

এটি আমার পক্ষে কাজ করেছে।


এটি কাজ করে তবে এর জন্য নয়PATH
মাত্তিও

আপনি কিভাবে mod_env লোড করবেন? এটি বিল্ট-ইন এবং স্থিতিশীলভাবে সংকলিত হওয়ায় এটি ডিফল্টরূপে লোড হয় না?
চেজ টি।

1

আপনি এটিকে start()init স্ক্রিপ্টের ফাংশনে সেট করতে পারেন, এরকম কিছু:

start() {
        echo -n $"Starting $prog: "
        check13 || exit 1
        export PATH=${PATH}:/var/ossec/bin
        LANG=$HTTPD_LANG daemon --pidfile=${pidfile} $httpd $OPTIONS
        RETVAL=$?
        echo
        [ $RETVAL = 0 ] && touch ${lockfile}
        return $RETVAL
}

সমস্ত পরিবেশের ভেরিয়েবল তালিকাভুক্ত করতে পার্ল স্ক্রিপ্ট তৈরি করুন:

#!/usr/bin/perl -wT
print "Content-type: text/html\n\n";

foreach $key (sort keys(%ENV)) {
  print "$key = $ENV{$key}<p>";
}

এটিকে রাখুন /var/www/cgi-binএবং পরীক্ষা করুন http://domain.com/cgi-bin/env.cgi, আপনি নীচের অংশগুলি দেখতে পাবেন:

PATH = /sbin:/usr/sbin:/bin:/usr/bin:/var/ossec/bin

1

--prefix=/usr --enable-layout=RedHatঅ্যাডভেসার ফাইলের সাথে উত্স থেকে সংকলিত অ্যাপাচি ২.৪.x রেডহ্যাটে অবস্থিত /usr/sbin/envvars। আমি নিশ্চিত করতে পারি যে সেই ফাইলটিতে উপযুক্ত প্যাথএইচটি সেট করা এটিকে তাই আপাচি এবং পিএইচপি সম্পর্কে সচেতন করে তোলে।

আমি এটি নির্ধারণের জন্য স্টেফান লাসিউস্কির মতো একই পদ্ধতির ব্যবহার করেছি। জন্য অ্যাপাচি 2.4.12 , /usr/sbin/envvarsফাইলের লাইন 49 উপর sourced হয় /usr/sbin/apachectl


ফেডোরা ২৩- /usr/sbin/apachectlতে /etc/sysconfig/httpdপরিবর্তে উল্লেখ করুন, এতে রয়েছে: file এই ফাইলটি আর httpd প্রক্রিয়ার জন্য অতিরিক্ত পরিবেশের ভেরিয়েবল কনফিগার করতে ব্যবহৃত হয় না। এটি সিস্টেমড দ্বারা প্রতিস্থাপন করা হয়েছে » পেস্ট.ডেবিয়ান.net
নিমো

1

আপনি যা চান সম্পাদক (উদাহরণস্বরূপ ভিআইএম ব্যবহার করে) দিয়ে অ্যাপাচি 2 প্লাস্ট ফাইলটি সম্পাদনা করুন:

$ sudo vim /System/Library/LaunchDaemons/org.apache.httpd.plist

প্লাস্ট ফাইলটিতে নিম্নলিখিতটি যুক্ত করুন:

<key>EnvironmentVariables</key>
<dict>
  <key>PATH</key>
  <string>/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin</string>
</dict>

তাহলে EnvironmentVariablesকী আগে থেকেই আছে, শুধু যোগ

<key>PATH</key>
<string>/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin</string>

যাও <dict>

এনবি: ম্যাক ওএসএক্স 10.11 (ইএল ক্যাপিটান) বা ততোধিকের জন্য, আপনাকে csrutil disableরিবুট এবং সিএমডি + আর টিপানোর পরে টার্মিনালে কমান্ড চালানো দরকার এবং তারপরে আপনি এই ফাইলটি সম্পাদনা করতে সক্ষম হবেন।

অ্যাপাচি 2 পুনরায় চালু করুন

$ sudo /usr/sbin/apachectl stop
$ sudo /usr/sbin/apachectl start

0

আমার অ্যাপাচি 2 সিস্টেমে আমি দেখতে পেয়েছি যে প্রচুর দর্শক কেবলমাত্র আমার স্মাইলস / ইমোটিকনগুলি (গম্ভীরভাবে!) সাবধানতার সাথে সংকলিত সংগ্রহকে স্তম্ভিত করতে চেয়েছিলেন, তাই আমি সিদ্ধান্ত নিয়েছিলাম যে ডিরেক্টরি পথটিতে এলোমেলোভাবে উত্পন্ন সিমলিংকটি ব্যবহার করা হবে যা একটি হিসাবে বেছে নেওয়া হবে অ্যাপাচি 2 পরিবর্তনশীল, এবং লিঙ্কগুলি ভাগ করা কার্যত অসম্ভব।

সুতরাং, প্রতি 30 মিনিটের পরে ক্রোন একটি পার্ল স্ক্রিপ্ট চালিয়েছিল যা .htaccess ফাইলটিকে আবার লিখতে পারে এবং সেটেটভ অন্তর্ভুক্ত করতে পারে যা আপনি নীচের সাথে দেখতে পারেন:

....
SetEnv SMILEYDIR "QyQGTZ8cgcK3zMVL0aNJ"

তারপরে, আমার পিএইচপি পৃষ্ঠাগুলির শীর্ষে আমি ভেরিয়েবলটি এর মতোই পড়তে পারি এবং পরবর্তী পৃষ্ঠায় সেখানে সেই পরিবর্তনকটি যথাযথ স্মাইলির পথ তৈরি করতে ব্যবহৃত হত:

$SMILEYDIR = apache_getenv("SMILEYDIR");
....
....
echo '<img src="/'.$SMILEYDIR.'//SMILEY_yay!.gif" border="0" hspace="3">';

আমার জন্য কাজ করে, এবং আশা করি এটি আপনাকে সহায়তা করবে!


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