অ্যাপাচে-র জন্য স্ক্রিপ্ট upstart- তত্ত্বাবধান?


16

আমি উবুন্টু 10.04-এ অ্যাপাচি চালাতে চাই এবং উপরের দিকের দুর্দান্ত তদারকির জিনিসগুলি ব্যবহার করতে চাই (আমি কেবল অ্যাপাচি থ্রিপি স্ক্রিপ্টের বিষয়ে কথা বলছি না, তবে সঠিক পরিষেবা তদারকি একটি লা ডেমোনটোল - যা বলা আছে, অ্যাপাচি মারা যাওয়ার পরে পুনরায় চালু করা উচিত, জিনিসগুলি সে রকমই).

উবুন্টু 10.04-এ অ্যাপাচি তদারকির জন্য কারও কি চলমান আপস্টার্ট কনফিগারেশন রয়েছে?

গুগলগুলি আমার কোনও সহায়ক হয়নি, তবে এটি হতে পারে যে আমার গুগল-ফু দুর্বল।


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

1
আমার বলা উচিত, আমার সাধারণ তদারকি পদ্ধতি হ'ল ডেমনটোলগুলি ব্যবহার করা। আমি খানিকটা অবাক হয়েছি যে নতুন উপমহাদেশ-উবুন্টু বিশ্বে কেউ আমার আপকুলের পরিষেবা তদারকির ব্যবহার করেনি, যতটা আমি আমার গুগলিতে বলতে পারি। আমি এটি একটি সমাধান সমস্যা হিসাবে প্রত্যাশা ছিল।
বেন উইলিয়ামস

উত্তর:


10

Woooo!

আমি আমার নিজস্ব সংস্করণ লিখেছি যা বেশ কার্যকর - কিছু কনফ ফাইল ফাইল হ্যাকিং এবং ব্যবহার সহ -D NO_DETACH

প্রথম আপ, আমি সেট করতে হয়েছে User, Groupএবং PidFile/etc/apache2/apache2.confম্যানুয়ালি বদলে তাদের কাছ থেকে আসছে আছে /etc/apache2/envvars। সঠিকভাবে রপ্তানি করা Vars আমি ঐ পেতে একটি উপায় কাজ করতে পারেনি (আমি উভয় চেষ্টা envএবং exportঅনুযায়ী http://manpages.ubuntu.com/manpages/lucid/man5/init.5.html , কিন্তু কোন ভাল)।

root@lucid:/etc/apache2# diff -u apache2.conf.orig apache2.conf
--- apache2.conf.orig   2010-09-20 13:46:33.857868534 +0930
+++ apache2.conf        2010-09-20 13:47:22.377842204 +0930
@@ -63,7 +63,7 @@
 # identification number when it starts.
 # This needs to be set in /etc/apache2/envvars
 #
-PidFile ${APACHE_PID_FILE}
+PidFile /var/run/apache2.pid

 #
 # Timeout: The number of seconds before receives and sends time out.
@@ -142,8 +142,8 @@
 </IfModule>

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

 #
 # AccessFileName: The name of the file to look for in each directory

তারপরে, এটি আমার কাজ /etc/init/apache2.conf:

# apache2 - http server
#
# Apache is a web server that responds to HTTP and HTTPS requests.
# Required-Start:    $local_fs $remote_fs $network $syslog
# Required-Stop:     $local_fs $remote_fs $network $syslog

description "apache2 http server"

start on runlevel [2345]
stop on runlevel [!2345]

pre-start script
    mkdir -p /var/run/apache2 || true
    install -d -o www-data /var/lock/apache2 || true
    # ssl_scache shouldn't be here if we're just starting up.
    # (this is bad if there are several apache2 instances running)
    rm -f /var/run/apache2/*ssl_scache* || true
end script

# Give up if restart occurs 10 times in 30 seconds.
respawn limit 10 30

exec /usr/sbin/apache2 -D NO_DETACH
respawn

আমি করতে পারি start|stop|status|reload apache2এবং অর্থপূর্ণ ফলাফল পেতে পারি ; আমি যদি kill -9মাস্টার অ্যাপাচি প্রক্রিয়াটি অবলম্বন করি তবে তা অবিলম্বে প্রশমিত হয়ে যায় এবং এটি প্রত্যাশা অনুযায়ী বুট শুরু হয়ে যায়। সুতরাং এটি যথাযথভাবে কাজ করছে আমি গণনা করি।


এমন কিছু জিনিস ছিল যা আমি চেষ্টা করেছি যাতে আমি কাজ করতে পারি না।

  • -D NO_DETACHএর সাথে মিলে অপসারণের চেষ্টা করেছি:
কাঁটাচামচ আশা
ডেমন আশা

যা পরিষেবাটি শুরু করতে ব্যর্থ হয়েছিল।

  • একটি অনুরূপ পদ্ধতি ব্যবহার করার চেষ্টা করা হয়েছে /etc/apache2/envvarsপূরণ করতে ${APACHE_*}ভেরিয়েবল:
APachE_RUN_USER = www-ডেটা রফতানি করুন
APachE_RUN_GROUP = www-ডেটা রফতানি করুন
APachE_PID_FILE = / var / run / apache2.pid রফতানি করুন

এটি শুরু করতে ব্যর্থ হয়েছে এবং সম্পর্কে একটি ত্রুটি তৈরি করেছে apache2: bad user name ${APACHE_RUN_USER}

  • কনসোল আউটপুট এবং কনসোল ডিফল্ট বিকল্পগুলির চেষ্টা করা হয়েছে; এই মুহুর্তে আমি সত্যিই অর্থবহ ত্রুটি বার্তাগুলি পাওয়ার চেষ্টা করে যাচ্ছিলাম। মনে হয় কোন পার্থক্য নেই।

    console output

  • এটি অ্যাপাচি বার্তাগুলি ডিবাগ করার জন্য দরকারী ছিল:

    exec /usr/sbin/apache2 -X -e debug -E /var/log/apache2/foo.log

  • এটি /etc/apache2/apache2.confব্যর্থ হয়েছে:

    exec APACHE_RUN_USER=www-data APACHE_RUN_GROUP=www-data APACHE_PID_FILE=/var/run/apache2.pid /usr/sbin/apache2 -D NO_DETACH -e debug -E /var/log/apache2/foo.log


নজর রাখার জন্য একটি জিনিস .. 'নেটওয়ার্কটি ইন্টারফেস কনফিগার করার আগে' রানলেভেল [2345] 'শুরু হতে পারে .. সুতরাং এথ0 "আপ" হতে পারে তবে এটি ব্যবহারের জন্য প্রস্তুত নাও হতে পারে। তেমনি, আপনার কোনও স্থানীয় ফাইল সিস্টেম নাও থাকতে পারে। পরিবর্তে একটি স্ট্যান্ডার্ড thats ব্যবহার শুরু হয় (স্থানীয়-ফাইল সিস্টেম এবং নেট-ডিভাইস-আপ IFACE! = লো)।
স্প্যাম্যাপস

মজাদার! প্রশ্নের মধ্যে থাকা মেশিনটি কিছুক্ষণের জন্য পুনরায় চালু হয়নি, তাই আমি এটি পরীক্ষা দিতে আগ্রহী। টিপ জন্য ধন্যবাদ.
বেন উইলিয়ামস

1
হাই, দুর্দান্ত প্রশ্ন, আরও ভাল উত্তর :) আপনি নীচের মত কাজ করে এনভায়ার পেতে পারেন: স্ক্রিপ্ট। / ইত্যাদি / অ্যাপাচি 2 / এনভ্যাভারস এক্সিকিউটিভ / ইউএসআর / এসবিন / অ্যাপাচি 2 -ডি কোন_ডিটাক শেষ স্ক্রিপ্ট
মার্টিন কার্পেন্টার

5

ঠিক আছে, এই স্ক্রিপ্টটি আমার পক্ষে কাজ করেছে:

# apache2 - http server
#
# Apache is a web server that responds to HTTP and HTTPS requests.
# Required-Start:    $local_fs $remote_fs $network $syslog
# Required-Stop:     $local_fs $remote_fs $network $syslog

description "apache2 http server"

start on runlevel [2345]
stop on runlevel [!2345]

pre-start script
    mkdir -p /var/run/apache2 || true
    install -d -o www-data /var/lock/apache2 || true
    # ssl_scache shouldn't be here if we're just starting up.
    # (this is bad if there are several apache2 instances running)
    rm -f /var/run/apache2/*ssl_scache* || true
end script

limit cpu 300 300
env APACHE_RUN_USER=www-data
env APACHE_RUN_GROUP=www-data
env APACHE_PID_FILE=/var/run/apache2.pid

# Give up if restart occurs 10 times in 30 seconds.
respawn limit 10 30

exec /usr/sbin/apache2 -D NO_DETACH
respawn

3

আমি এই সমস্যাটিকেও আঘাত করেছি, তবে আমি অন্য পদ্ধতির ব্যবহার করেছি। এনএনভি ভেরিয়েবলগুলি পাওয়ার সহজতম উপায় হ'ল সোর্স কমান্ডটি ব্যবহার করা এবং এপাচি এনভায়ার্স ফাইলটিতে এটি নির্দেশ করা, তবে আপনি -D ফোরগ্রাউন্ড বিকল্পগুলির সাহায্যে অ্যাপাচি চালাতে পারেন

সুতরাং মূলত আপনার এমন স্ক্রিপ্টের দরকার যা দেখতে দেখতে (আমার /etc/apache2/apache2_foreground.sh এ রয়েছে):

#!/bin/bash

read pid cmd state ppid pgrp session tty_nr tpgid rest < /proc/self/stat
trap "kill -TERM -$pgrp; exit" EXIT TERM KILL SIGKILL SIGTERM SIGQUIT


source /etc/httpd/envvars
apache2 -D FOREGROUND

তারপরে আপনি এটিকে এক্সিকিউটেবল করে তুলুন এবং সুপারভাইজারকে এর অবস্থানটির দিকে নির্দেশ করুন, আপনার স্টপ সিগন্যাল 6ও ব্যবহার করতে হবে

command=/etc/apache2/apache2_foreground.sh
stopsignal=6

স্ক্রিপ্টের দুটি প্রথম লাইন স্ক্রিপ্টের প্রক্রিয়া গ্রুপ আইডিটি ধারণ করে এবং একটি ফাঁদ সেট করে যা প্রক্রিয়াতে প্রেরণ করা সংকেতগুলিতে চলে - এই ফাঁদটি সমস্ত অ্যাপাচি 2 প্রক্রিয়া চালিত পিতামাতার একটি নেতিবাচক প্রক্রিয়া আইডি সহ একটি কিল কার্যকর করে (স্ক্রিপ্ট) নিজেই - - নেতিবাচক পিআইডি দিয়ে হত্যার অর্থ হ'ল এই জাতীয় প্রক্রিয়াটির সমস্ত বাচ্চাদের হত্যা করা (সুতরাং এই ক্ষেত্রে সমস্ত অ্যাপাচি 2 প্রক্রিয়া), আমি তদারক না করে অ্যাপাচি 2 প্রক্রিয়া হত্যা করতে সক্ষম হইনি

স্টপ সিগন্যাল 6 ব্যবহার করা হয়েছে কারণ আমি অন্য কোনও সিগন্যালকে ফিন করতে পারি না যা ফাঁদে যেতে পারে, 9 টি ধরা যায় না, এবং 2 এবং 3 কিছুই না করে (স্ক্রিপ্টটি মারা যায় না)

তারপরে এটি অ্যাপাচি 2 কনফিগারেশনে কোনও পরিবর্তন ছাড়াই সুচারুভাবে কাজ করা উচিত


2

এই বিষয়টিতে স্কট জেমস রিমেন্টের কয়েকটি পোস্ট যা আমি আশা করি আপনাকে সহায়তা করতে পারে:


ঠিক আছে, সুতরাং তারা ডেস্টন পর্যবেক্ষণ ও আপাতদৃষ্টিতে কিছু বিবরণ সম্পর্কে ইতিহাসের কিছু অংশে। এটি এখনও আপস্টার্ট-তত্ত্বাবধানে থাকা অ্যাপাচিগুলির জন্য কোনও স্ক্রিপ্ট নয়, এবং এটি আপস্টার্ট ডকুমেন্টেশনে আরও বিশদ রয়েছে। আমি সন্দেহ করি এর চূড়ান্ত উত্তরটি "এটি নিজে লিখুন" হতে চলেছে।
বেন উইলিয়ামস

0

ওহ, হ্যাঁ, সাধারণত উত্তরটি "আপনার নিজের লিখুন" হবে, সুতরাং আমার সেই অনুসারে সাধারণ পরামর্শটি শুরু করা - আপস্টার্ট পৃষ্ঠা এবং… টাইপ করে টাইপ করা উচিত to

আমি আশা করি যে আমার চেয়ে আরও জ্ঞানী কেউ একজন ওয়ার্কিং আপস্টার্ট স্ক্রিপ্ট নিয়ে আসবেন।


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