अपाचे के लिए upstart-पर्यवेक्षित init स्क्रिप्ट?


16

मैं उबंटू 10.04 पर अपाचे चलाना चाहता हूं, और अपस्टार्ट में अच्छे पर्यवेक्षण सामान का उपयोग करना चाहता हूं (मैं सिर्फ अपाचे इनिट स्क्रिप्ट के बारे में बात नहीं कर रहा हूं, लेकिन उचित सेवा पर्यवेक्षण एक ला डेमोंटूलस - जो कहने के लिए, अपाचे को फिर से शुरू करता है जब वह मर जाता है, तो चीजें उसके जैसा)।

क्या किसी के पास ubuntu 10.04 पर अपाचे की निगरानी के लिए एक रनिंग अपस्टार्ट कॉन्फिग है?

Googles ने मेरी कोई मदद नहीं की है, लेकिन यह हो सकता है कि मेरा google-fu कमजोर हो।


2
मैं इस बारे में भी जानना चाहता हूं। मैं बहुत सी चीजों (मुख्य रूप से Django प्रक्रियाओं) की मेजबानी करता हूं और कुछ अधिक मजबूत चीज़ों के लिए अपनी नाजुक इनिट स्क्रिप्ट्स को डंप करना चाहूंगा। नवोदय नहीं माना जाता था, लेकिन अगर यह काम करता है ...
ओली

1
मुझे कहना चाहिए, मेरी सामान्य पर्यवेक्षण विधि डेमोंटोसल्स का उपयोग करना है। मुझे थोड़ी हैरानी है कि नई अपस्टार्ट-उबंटू दुनिया में, किसी ने भी अपस्टार्ट की सेवा पर्यवेक्षण का उपयोग नहीं किया है, जहां तक ​​मैं अपने googling में बता सकता हूं। मैं इसे एक सुलझी हुई समस्या होने की उम्मीद कर रहा था।
बेन विलियम्स

जवाबों:


10

Woooo!

मैंने अपना खुद का संस्करण लिखा है जो बहुत काम कर रहा है - कुछ कॉन्फिडेंस फ़ाइल हैकिंग और उपयोग के साथ -D NO_DETACH

सबसे पहले, मैं सेट किया था User, Groupऔर PidFileमें /etc/apache2/apache2.confमैन्युअल रूप से, के बजाय उन्हें से आ रही है /etc/apache2/envvars। मैं उन संस्करणों को ठीक से निर्यात करने के लिए एक तरीका नहीं निकाल सका (मैंने कोशिश की 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] 'नेटवर्क इंटरफेस कॉन्फ़िगर होने से पहले शुरू हो सकता है .. इसलिए eth0 "ऊपर" हो सकता है लेकिन यह उपयोग के लिए तैयार नहीं हो सकता है। इसी तरह, आपके पास कोई स्थानीय फाइल सिस्टम नहीं हो सकता है। इसके बजाय एक मानक thats का उपयोग किया गया है (स्थानीय-फाइलसिस्टम और नेट-डिवाइस-अप IFACE! = Lo)।
SpamapS

दिलचस्प! विचाराधीन मशीन को कुछ समय के लिए रिबूट नहीं किया गया है, इसलिए मुझे वह परीक्षा देने में दिलचस्पी होगी। पारितोषिक के लिए धन्यवाद।
बेन विलियम्स

1
नमस्ते, महान सवाल, और भी बेहतर जवाब :) आप envvars निम्नानुसार काम कर सकते हैं: स्क्रिप्ट। / etc / apache2 / envvars exec / usr / sbin / apache2 -D NO_DETACH अंत स्क्रिप्ट
मार्टिन बढ़ई

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

मैंने भी इस समस्या को मारा है, हालाँकि मैंने एक और तरीका इस्तेमाल किया है। Env वैरिएबल प्राप्त करने का सबसे आसान तरीका स्रोत कमांड का उपयोग करना है और इसे Apache envvars फ़ाइल की ओर इंगित करता है, फिर आप -D FOREGROUND विकल्पों के साथ अपाचे चला सकते हैं

मूल रूप से आपको एक स्क्रिप्ट की आवश्यकता है जो इस तरह दिखती है (मेरा /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

स्क्रिप्ट की दो पहली पंक्तियाँ स्क्रिप्ट की प्रोसेस ग्रुप आईडी को पकड़ती हैं, और एक ट्रैप सेट करती हैं, जो प्रोसेस में जाने वाले सिग्नल्स पर चलता है - यह ट्रैप पेरेंट की एक नेगेटिव प्रोसेस आईडी के साथ एक किल को अंजाम देता है, जो सभी apache2 प्रोसेस को रन करता है (स्क्रिप्ट खुद) - एक नकारात्मक पीआईडी ​​के साथ हत्या का मतलब ऐसी प्रक्रिया के सभी बच्चों को मारना है (इसलिए इस मामले में सभी अपाचे 2 प्रक्रियाएं), इसके बिना मैं पर्यवेक्षक को अपाचे 2 प्रक्रियाओं को मारने में सक्षम नहीं था।

स्टॉपसिग्नल 6 का उपयोग किया जाता है क्योंकि मैं किसी भी अन्य संकेत पर जुर्माना नहीं लगा सकता था जो जाल को लागू कर सकता है, 9 को पकड़ा नहीं जा सकता है, और 2 और 3 कुछ भी नहीं करते हैं (स्क्रिप्ट को नहीं मारा गया है)

इसके बाद इसे सुचारू रूप से काम करना चाहिए, जिसमें अपाचे 2 कॉन्फ़िगरेशन में कोई संशोधन न हो


2

इस विषय पर स्कॉट जेम्स रेमांट के कुछ पोस्ट जो मुझे आशा है कि आपकी मदद कर सकते हैं:


ठीक है, इसलिए वे इतिहास में कुछ डेमों की देखरेख और कुछ विवरणों का विवरण देते हैं। यह अभी भी अपस्टार्ट-पर्यवेक्षित अपाचे के लिए एक स्क्रिप्ट नहीं है, और, अपस्टार्ट प्रलेखन में अधिक विवरण है। मुझे संदेह है कि इसका अंतिम उत्तर "इसे स्वयं लिखना" होगा।
बेन विलियम्स

0

ओह, हाँ, आमतौर पर उत्तर "अपना खुद का" लिखना होगा, इसलिए मेरा तदनुसार विशिष्ट सुझाव गेटिंग स्टार्टेड - अपस्टार्ट पृष्ठ और ... दूर टाइप करना होगा।

मुझे उम्मीद है कि इस मुद्दे पर कोई और जानकार मेरे ऊपर काम करने वाली स्क्रिप्ट के साथ आएगा।


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