मैं upstart के माध्यम से nginx कैसे शुरू कर सकता हूं?


9

पृष्ठभूमि:

DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=10.04
DISTRIB_CODENAME=lucid
DISTRIB_DESCRIPTION="Ubuntu 10.04 LTS"

मैंने nginx बनाया है, और मैं इसे शुरू करने के लिए upstart का उपयोग करना चाहूंगा:

साइट से nginx upstart स्क्रिप्ट:

description "nginx http daemon"

start on runlevel 2

stop on runlevel 0
stop on runlevel 1
stop on runlevel 6

console owner

exec /usr/sbin/nginx -c /etc/nginx/nginx.conf  -g "daemon off;"

respawn

जब मैं इसे चलाने के लिए initctl का उपयोग करने की कोशिश करता हूं, तो मुझे "अज्ञात नौकरी" मिलती है, जो मैंने अभी स्पष्ट रूप से सीखा है कि कोई त्रुटि है, (त्रुटियों का वर्णन करने के लिए "त्रुटि" के साथ क्या गलत है?)

क्या कोई मुझे सही दिशा दिखा सकता है ? मैंने दस्तावेज़ीकरण पढ़ा है, जैसा कि यह है, और यह एक SysV init प्रतिस्थापन के लिए विरल की तरह लगता है ... लेकिन जो कुछ भी बस इस नौकरी को सूची में जोड़ने की जरूरत है, उसे चलाएं, और मेरे जीवन के बचे हुए भाग के साथ मिलें। .. कोई सुझाव?

संपादित करें: initctl संस्करण init (0.6.5 ऊपर)


1
'अज्ञात नौकरी' बनाम 'त्रुटि' के बारे में एक टिप्पणी। आप सिर्फ गलत जगह देख रहे हैं। Initctl config फ़ाइल नहीं पढ़ता है, यह सिर्फ Upstart को एक ज्ञात काम को लोड करने के लिए कहता है - और जब आप initctl कमांड जारी करते हैं, तो upstart इस नौकरी को नहीं जानता है। इससे पहले त्रुटि तब हुई जब अपस्टार्ट ने नौकरी की फाइल को पढ़ने की कोशिश की। सिस्टम लॉग में एक त्रुटि संदेश होना चाहिए (/ var / log / syslog, / var / log / संदेश या जहां भी आपका सिस्टम इन लॉग को संग्रहीत करता है)
Jacek Konieczny

वैसे, यह पता चलता है कि / sbin में अपस्टार्ट नौकरियों के लिए स्टार्ट और स्टॉप कमांड हैं। उन्होंने मेरे लिए काम किया। अब, वे वापस initctl से लिंक करते हैं, इसलिए मैं अनिश्चित हूं कि वे क्यों काम करते हैं, लेकिन वे करते हैं।
चिग्गी

जवाबों:


3

stop onअपस्टार्ट> = 0.5 के लिए अपस्टार्ट नौकरी विवरण में आपके पास कई निर्देश नहीं हो सकते हैं ।

और console ownerशायद वह नहीं है जो आप चाहते हैं (यह नगीनेक्स को सिस्टम कंसोल का मालिक बनाता है)।

प्रयत्न:

description "nginx http daemon"
start on runlevel 2
stop on runlevel [016]
console output
exec /usr/sbin/nginx -c /etc/nginx/nginx.conf  -g "daemon off;"
respawn

फिर भी अज्ञात नौकरी, अफसोस। आप यह जानकारी कहाँ से प्राप्त कर रहे हैं? आदमी? जानकारी? ऑनलाइन? 0.6.5 कहाँ प्रलेखित है?
चिग्गी

थोड़े ने काम किया .. thnx
chiggsy

हां, कम से कम वेब पर वर्तमान अपस्टार्ट डॉक्यूमेंट ढूंढना कठिन है। लेकिन मैनुअल पेज काफी अच्छा है। कोशिश करें: man 5 init
जेसेक कोनजेनी

1
यह उत्पादन सर्वर पर nginx चलाने का सही तरीका नहीं है। daemon offविकल्प केवल विकास के लिए है।
फिल्ट

16

मैंने एक से अधिक बार यहां समाप्त किया है इसलिए मैंने सोचा कि मैं यहां के उत्तरों का उपयोग करने के बाद अपने स्वयं के अनुभव के आधार पर एक अद्यतन उत्तर प्रदान करूंगा। विशेष रूप से @danorton और @orj को उनके उत्तर के लिए धन्यवाद।

इस लिपि का परीक्षण अपस्टार्ट 1.5 पर किया गया है जो उबंटू 12.04 पर नगनेक्स 1.0.11 और पैसेंजर 3.0.11 के साथ चल रही है। यदि आप पैसेंजर का उपयोग नहीं कर रहे हैं तो आपको post-stopलाइन के साथ खेलने की आवश्यकता हो सकती है । अपस्टार्ट कुकबुक का संदर्भ लें।

एक खाली /etc/init/nginx.confजोड़ में निम्नलिखित पंक्तियाँ हैं (यदि आप चाहें तो टिप्पणियों को हटा सकते हैं):

description "nginx http daemon"

start on (filesystem and net-device-up IFACE=lo)
stop on runlevel [!2345]

env DAEMON=/usr/local/nginx/sbin/nginx
env PIDFILE=/var/run/nginx.pid

# Needed to allow Nginx to start, however, the wrong PID will be tracked
expect fork

# Test the nginx configuration (Upstart will not proceed if this fails)
pre-start exec $DAEMON -t

# Ensure nginx is shutdown gracefully
# Upstart will be tracking the wrong PID so the following is needed to stop nginx
post-stop exec start-stop-daemon --stop --pidfile $PIDFILE --name nginx --exec $DAEMON --signal QUIT

# Start Nginx
exec $DAEMON

मैंने Nginx Wiki से Upstart स्क्रिप्ट ली है और इसे कई लाइनों के रूप में ट्विक किया गया है जिनकी आवश्यकता नहीं है, भ्रम का कारण है या काम नहीं करता है।

जहाँ आपने nginx स्थापित किया है और पीआईडी ​​लिख रहे हैं, उसके आधार पर आपको फेरबदल env DAEMONऔर env PIDलाइनों की आवश्यकता हो सकती है । PID को nginx में कॉन्फ़िगर किया जा सकता है।

मैंने सभी रूपों की कोशिश की expect। केवल expect forkकाम करने लगता है। पैसेंजर के साथ नगीने 61 कांटे बनाता है। अपस्टार्ट को 0, 1 या 2 की आवश्यकता है। जैसा कि अन्य ने संकेत दिया है, उपस्टार्ट गलत पीआईडी ​​पर नज़र रखेगा। मैं भी हटा दिया है respawnक्योंकि यह शायद उसी कारण से कुछ नहीं करता है। कुछ अतिरिक्त प्री / पोस्ट-स्टार्ट स्क्रिप्ट वास्तविक पीआईडी ​​को हथियाने के द्वारा ठीक करने में सक्षम हो सकती है। हालाँकि, मैं पुनरारंभ को संभालने के लिए मॉनेट का उपयोग करता हूं, इसलिए इसकी आवश्यकता नहीं है।

उपयोग न करें daemon off। यह केवल विकास के लिए है। Http://wiki.nginx.org/CoreModule#daemon देखें

संदर्भ:


1
मुझे लगता है कि आप का उपयोग करना चाहते हैं daemon off;ताकि upstart सही प्रक्रिया / PID को बिना किसी निर्देश expect forkया post-stopनिर्देश के देखता है । विकि अनुभाग डेमॉन विकल्प का वर्णन भी कहा गया है "आप RUNIT / daemontools साथ उत्पादन मोड में सुरक्षित रूप से बंद डेमॉन का उपयोग कर सकते एक सुंदर उन्नयन लेकिन आप ऐसा नहीं कर सकते।" है, जो मुझे लगता है के लिए बात कर रहा है पर एक नया बाइनरी के उन्नयन मक्खी की सुविधा।
गैरी

3

आप नहीं कर सकते। कम से कम ठीक से, वैसे भी नहीं।

नग्नेक्स ने अपने डेमॉन को उन दो तरीकों में से एक में नहीं उतारा है जिनके लिए अपस्टार्ट की आवश्यकता है, या तो "उम्मीद कांटा" या "उम्मीद डेमॉन" के माध्यम से, इसलिए अपस्टार्ट मास्टर नगनेक्स प्रक्रिया को ट्रैक करने में असमर्थ है। कुछ हैक हैं, लेकिन उनकी अपनी समस्याएं हैं।

यदि आप इस तथ्य से ठीक हैं कि upstart मास्टर प्रक्रिया का ट्रैक नहीं रख सकता है और इसे शटडाउन पर मार सकता है, तो यह काम करेगा:

start on local-filesystems \
  and (net-device-added INTERFACE=lo) \
  and (runlevel [12345])
stop on runlevel [06]

env DAEMON=/usr/sbin/nginx

respawn
respawn limit 10 5

expect daemon

pre-start script
  $DAEMON -t
end script

$DAEMON

expect daemonमेरे लिए लटकने का कारण बनता है (उबंटू 12.04, उपस्टार्ट 1.5, नगनेक्स)। expect forkहालांकि @danorton के संकेत के रूप में काम किया गया है, उपस्टार्ट गलत PID पर नज़र रखेगा। मुझे काम करने के लिए रिस्पॉन्स भी नहीं मिला (मेरा पूरा जवाब देखें)।
फिल्ट

2

वहाँ एक है कल का नवाब कॉन्फ़िग फ़ाइल उदाहरण में nginx विकी

आपको कॉन्फ़िगरेशन फ़ाइल में nginx बाइनरी के लिए पथ को समायोजित करने की आवश्यकता हो सकती है।

यह विन्यास फाइल मेरे लिए Ubuntu 10.04 और nginx 1.0.5 के साथ ठीक काम कर रही है।

मैंने इंगित करने के लिए एक nginxसिमलिंक भी स्थापित किया है ताकि मैं शुरू करने और रोकने के लिए मानक कमांड का उपयोग कर सकूं ।/etc/init.d/lib/init/upstart-jobservicenginx

नोट: यदि आप NGINX के साथ फ़्यूज़न पैसेंजर स्थापित करते हैं, तो आपको अपस्टार्ट कॉन्फ़िग स्क्रिप्ट में निम्नलिखित श्लोक जोड़ने की आवश्यकता हो सकती है:

env PID=/opt/nginx/logs/nginx.pid
post-stop script
    start-stop-daemon --stop --pidfile $PID --name nginx --exec $DAEMON --signal TERM
end script

मुझे यह अपने उबंटू विन्यास पर आवश्यक लगा। अन्यथा जब मैंने जारी किया initctl stop nginxया service nginx stopnginx वास्तव में बंद नहीं किया था। मैंने यह भी देखा कि अपस्टार्ट ने सोचा था कि नग्नेक्स प्रक्रिया में एक पीआईडी ​​थी जो वास्तव में यात्री प्रक्रियाओं में से एक की पीआईडी ​​थी। तो स्पष्ट रूप से NGINX / पैसेंजर उपस्टार्ट को थोड़ा भ्रमित कर रहे हैं।


यात्री के लिए उस स्क्रिप्ट के लिए धन्यवाद। यह प्रक्रियाओं को रोकने के लिए लग रहा था लेकिन मुझे stop: Job failed while stoppingऐसा करते समय मिला । क्या तुमने यह देखा?
फिल्प

मुझे @PhilT जैसी ही समस्या है, इस पर कोई शब्द?
क्लाउडियो पोली

0

मैं उपयोग करता हूं:

description "Nginx HTTP Server"

start on filesystem
stop on runlevel [!2345]

respawn

exec /opt/nginx/sbin/nginx -g "daemon off;"

पर रोक runlevel [!...]अधिक मानक लगता है। यह स्टॉक ssh / samba स्क्रिप्ट क्या करता है। आपको respawnथोड़ा भी जोड़ना चाहिए ताकि यह मर जाए तो फिर से शुरू हो जाए। मुझे भी यकीन नहीं है कि आप क्यों चाहते हैं console outputकि बस स्टडआउट को कंसोल आउटपुट भेजता है। डिफ़ॉल्ट व्यवहार बस लकड़हारे को कंसोल आउटपुट भेजना है।

आप अपस्टार्ट विकी पर सभी श्लोक डॉक्स देख सकते हैं


दुर्भाग्य से, उस विकी का अर्थ है कि यह केवल संस्करण 0.5 है। यह मेरे लिए बहुत अजीब है कि इस तरह के एक महत्वपूर्ण बदलाव को उस फैशन में प्रलेखित किया गया है।
चिग्गी

केवल संस्करण 0.5 क्या है?
जिम मिचनर

सामान्य रूप से विकी। मैन पेज ठीक हैं, लेकिन वे निश्चित रूप से 'जानकारी' पेज नहीं हैं, जो आमतौर पर बहुत अधिक विस्तृत होते हैं।
चिग्गी


0

अजीब तरह से यहां कोई भी उत्तर वास्तव में पूरी तरह से काम नहीं करता है क्योंकि वे एक स्टॉप / मारे गए राज्य में ऊपर की ओर निकलते हैं जो दूसरे काम करना शुरू करने से रोकता है। इसका मतलब है कि restart nginxविफल।

अपस्टार्ट के साथ बग को https://bugs.launchpad.net/upstart/+bug/406397 पर अच्छी तरह से प्रलेखित किया गया है और मुझे आश्चर्य है कि अपस्टार्ट के लेखक ने इसे ठीक करने के लिए पर्याप्त देखभाल नहीं की है। एकमात्र समाधान जो मैंने देखा है कि निम्नलिखित कार्य है (एक ही बग रिपोर्ट से चोरी):

# nginx - Nginx Web Server
#

description "Nginx Web Server"

start on (local-filesystems and
    (net-device-up IFACE=eth1 or net-device-up IFACE=eth0) )
stop on runlevel [!2345]

env DAEMON=/usr/local/sbin/nginx
env PID=/var/run/nginx.pid

respawn

pre-start script
$DAEMON -s stop 2> /dev/null || true
$DAEMON -t > /dev/null
$DAEMON
end script

script
sleepWhileAppIsUp(){
    while pidof $1 >/dev/null; do
    sleep 1
    done
}
sleepWhileAppIsUp $DAEMON
end script

post-stop script
if pidof > /dev/null $DAEMON;
then
    $DAEMON -s stop
fi
end script

इसे इस तरह लिखने का फायदा यह है कि रिस्पना भी काम करती है। नुकसान यह है कि यह बदसूरत है और एक बुरा हैक है।


Upstart बहुत ज्यादा एक मृत उत्पाद है; उबंटू इसका उपयोग करते हुए लगभग अंतिम वितरण है। अन्य सभी दूर जा रहे हैं या पहले ही स्विच कर चुके हैं।
माइकल हैम्पटन

यहां तक ​​कि खुद उबंटू भी नए संस्करणों में सिस्टमड पर स्विच कर चुका है। लेकिन हम में से कुछ sysadmins अभी भी 14.04 के साथ अटके हुए हैं क्योंकि LTS।
इवान अनिशचुक ५'१६
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.