सिस्टम बूट पर मेरी अपस्टार्ट सेवा क्यों नहीं शुरू हो रही है?


37

से इसे जारी रखते हुए इस सवाल है, मैं एक साधारण नवोदय सेवा (लिखा है /etc/init/pms.conf इस प्रकार मेरी नेतृत्वहीन उबंटू सर्वर 11.04 बॉक्स के लिए):

start on filesystem and net-device-up IFACE=eth0
stop on runlevel [016]
respawn

exec /home/administrator/pms-current/PMS.sh

मैं कमांड लाइन से इस सेवा को शुरू (या रोक) सकता हूं:

service pms start

और मैं देख सकता हूं कि यह वास्तव में चल रहा है।

हालाँकि, जब मैं पहली बार अपनी मशीन को बूट करता हूँ तो सेवा शुरू नहीं होती है। यदि मैं बॉक्स में SSH करता हूं और मुझे मिलने वाली सेवा स्थिति की जांच करता है:

$ service pms status
pms stop/waiting

मेरा सवाल यह है कि ऐसा क्यों हो रहा है? मेरी सेवा बूट पर क्यों नहीं शुरू हो रही है?

अद्यतन 1 : अनिश्चित है कि क्या मेरी सेवा शुरू की जा रही थी और बाद में मर रही थी या बस शुरू नहीं हो रही थी, मैंने PMS.sh में निम्नलिखित को जोड़ा:

echo "STARTED" > $STARTLOG

यह स्पष्ट रूप से मुझे सिर्फ कुछ देखने के लिए देता है। मैंने स्वयं सेवा शुरू करके और फिर start.log की जाँच करके यह परीक्षण किया । मैंने फिर start.log को हटा दिया और रिबूट किया। यह पुनः आरंभ करने के बाद नहीं था, इसलिए ऐसा लगता है कि हालांकि अपस्टार्ट निश्चित रूप से मेरी सेवा शुरू नहीं कर रहा है। मुझे लगता है कि यह प्रक्रिया में पहले के बिंदु पर मर रहा हो सकता है, लेकिन लगता है कि यह सब की सादगी को देखते हुए संभावना नहीं है।

अद्यतन 2 : मैंने अभी 11.10 में अपग्रेड किया है जिसमें अपस्टार्ट अपग्रेड शामिल है, लेकिन यह समस्या अभी भी होती है।

अद्यतन 3 : जैसा कि अनुरोध किया गया है, मैंने बूट किया है --debug। बिल्ली /var/log/syslog | grep initका उत्पादन सवाल में जगह करने के लिए बहुत लंबा है, लेकिन आप इसे यहां देखते हैं

अद्यतन 4 : अधिक लॉग, इस समय ऊपर की ओर का शीर्ष शामिल है। 1 चलाएं और 2 चलाएं


क्या आप सुनिश्चित हैं कि स्क्रिप्ट निष्पादित नहीं हुई थी? Pms स्टॉप / वेटिंग मैसेज का मतलब है कि अपस्टार्ट जॉब चलाई गई थी और यह कि सभी कमांड सामान्य रूप से समाप्त हो गए थे।
व्यवस्थित करें

अपस्टार्ट डिबगिंगcat /var/log/syslog | grep init में निर्देशों का उपयोग करके अपस्टार्ट के
सियारन लीडमैन २६'११

@Anarci: कृपया मेरे प्रश्न में अपडेट 3 देखें।
केंट बूगार्ट

अधिकांश उपयोगकर्ता इस तरह का ईमेल पता नहीं देंगे, बल्कि उबंटू
पास्टबीन की

@ आनंदी: हो गया - कृपया मेरा सवाल देखिए।
केंट बूआगार्ट

जवाबों:


19

मैं नौकरी की वर्बोसिटी बढ़ाने की सलाह दूंगा, जैसे कि प्री-स्टार्ट / पोस्ट-स्टार्ट एंट्री का उपयोग करके।

pre-start script
  logger "pre-start for myprog"
end script

post-start script
  logger "post-start for myprog"
end script

# and for PMS itself:
script
  logger "just before executing PMS"
  exec /home/administrator/pms-current/PMS.sh
end script

Http://upstart.ubuntu.com/cookbook/ पर अधिक जानकारी

इसके अलावा http://upstart.ubuntu.com/wiki/Debugging पर एक नज़र डालें


यह वास्तव में मेरा सिर कर रहा है। मैंने आपके पोस्ट के पीछे से एक दर्जन अलग-अलग चीजों की कोशिश की है। लॉग में अलग-अलग अस्पष्ट संदेशों के साथ सभी विफल रहे हैं। मेरे नवीनतम प्रयास के परिणामस्वरूप परिणाम हुए : pms मुख्य प्रक्रिया (1329) को स्थिति 143 के साथ समाप्त कर दिया गया , जिसका अर्थ है मेरे लिए शून्य। मैं देख सकता हूँ कि PMS.sh भी शुरू नहीं हो रहा है क्योंकि पहली चीज़ जो यह करता है वह अपने लॉग को लिखता है, और वह लॉग एंट्री मौजूद नहीं है। मैं अपना पूर्व-प्रारंभ आउटपुट देख सकता हूं, जो मुझे बताता है कि लक्ष्य फ़ाइल मौजूद है और निष्पादन योग्य है। मैं इसे कल फिर से उठाऊंगा, लेकिन अगर आपके पास कोई विचार है तो मैं उन्हें सुनना पसंद करूंगा। धन्यवाद।
कैंट बूगार्ट

hi @KentBoogaart, मुझे आपकी वही समस्या प्रतीत हो रही है। क्या आपने हल खोज लिया?
डेनियल बी

@KentBoogaart मुझे आपके समान समस्या है? तुम्हारा कोई भाग्य?
मेविन बाबू

14

यहाँ शायद क्या हो रहा है कि आपके नेटवर्क एडेप्टर के आने से पहले पीएमएस शुरू हो रहा है, और शायद लूपबैक एडेप्टर (लो) से पहले भी। यह मानते हुए कि हम PS3 मीडिया सर्वर के बारे में बात कर रहे हैं, यह एक नेटवर्क सेवा है और यह संभवत: कोई इंटरफेस उपलब्ध नहीं है।

मापदंड पर अपनी शुरुआत को बदलने की कोशिश करें:

start on filesystem and net-device-up IFACE!=lo

मतलब, किसी भी "वास्तविक" नेटवर्क इंटरफ़ेस के बाद शुरू करें। हालाँकि, यह आदर्श नहीं हो सकता है, अगर eth0 अगला इंटरफ़ेस अप है, PMS शुरू होता है, लेकिन आप वास्तव में चाहते हैं कि PMS wlan0 का उपयोग करे, ऐसा नहीं होगा। सेवा शुरू हो जाएगी, लेकिन हो सकता है कि वह उस इंटरफ़ेस को लेने में सक्षम न हो जो आप इसे सुनना चाहते थे। यह मानते हुए कि आप जिस इंटरफ़ेस को स्ट्रीम करने जा रहे हैं, वह जानता है और यह परिवर्तित नहीं होगा, मैं इसे नौकरी में हार्डकोड करूंगा, जैसे:

start on filesystem and net-device-up IFACE=wlan0

Oneiric (11.10) पर, आप static-network-upसभी सांख्यिकीय रूप से कॉन्फ़िगर किए गए उपकरणों की प्रतीक्षा करने के लिए घटना का उपयोग कर सकते हैं । जो अच्छा है क्योंकि यह आपको इंटरफ़ेस को हार्डकोड किए बिना नेटवर्क-निर्भर नौकरियों को लिखने की अनुमति देता है। [नोट: "सभी सांख्यिकीय रूप से कॉन्फ़िगर किए गए उपकरणों" द्वारा, मैं /etc/network/interfacesNetworkManager के बजाय उपयोग करने की बात कर रहा हूं । इसका अर्थ स्थिर IP बनाम DHCP के अर्थ में स्थिर नहीं है।]


यह चाल की तरह लग रहा था, लेकिन यह काम नहीं किया। मैं केवल है loऔर eth0लेकिन मैं अपने दूसरे सुझाव का प्रयोग किया: start on filesystem and net-device-up IFACE=eth0। फिर भी कोई रिबूट के बाद नहीं जाता है। मैंने अभी-अभी PMS लॉग में कुछ देखा है जो लीड हो सकता है। मैं जांच करूंगा और वापस आ
जाऊंगा

यह दिलचस्प है। एक बात जिसका मैंने उल्लेख नहीं किया है कि मैंने आपकी मूल स्क्रिप्ट की कोशिश की और यह मेरी मशीन के लिए बूट पर काम करती है। मैंने इसका श्रेय सिर्फ ड्रॉ के भाग्य को दिया (यानी मेरी दौड़ की स्थिति में, अच्छी कार जीती, और आपकी खराब कार जीती)। मैं वास्तव में यह नहीं देख सकता कि हम यहां किस अन्य निर्भरता से चूक रहे हैं। अजीब।
मार्क रसेल

2
चूंकि आप इसे बूट करने के बाद शुरू कर सकते हैं, हमें एक और सेवा निर्भरता याद आ रही होगी। एक गंदा हैक जो काम कर सकता है (लेकिन हमें बिल्कुल नहीं रोशन करेगा) sleep 10शेल स्क्रिप्ट को निष्पादित करने से पहले एक "पूर्व-शुरुआत स्क्रिप्ट" में सिर्फ एक - या उच्चतर में छोड़ देना है ।
मार्क रसेल

क्षमा करें निशान - लेकिन हम एक ही पृष्ठ पर हैं। मैंने सोने की 10 चीज़ों को पहले से शुरू की गई स्क्रिप्ट में आज़माया। नही जाओ। फिर मैंने डिबग.लॉग को पूरी तरह से हटाने और रिबूट करने की कोशिश की। बूट के बाद मेरे पास समान सेवा की स्थिति थी, और कोई डीबग.लॉग फ़ाइल नहीं है, इसलिए मुझे यकीन नहीं है कि पीएमएस वास्तव में बिल्कुल चलाया गया है। क्या इसका निदान करने का एक आसान तरीका है? अगर मैं कुछ आउटपुट को बाहर करने के लिए PMS.sh को बदल दूं, तो यह कहां जाएगा? मुझे लगता है कि मैं इसे हमेशा अपनी फ़ाइल में निर्देशित कर सकता हूं - हो सकता है कि अगला शॉट दिया जाए।
कैंट बूगार्ट

मैंने अभी और जानकारी के साथ अपना प्रश्न अपडेट किया है।
कैंट बूगार्ट

3

आपके syslog की जांच करने से pms प्रक्रिया बिना किसी त्रुटि के शुरू होती है, लेकिन फिर थोड़ी देर के बाद इसका लक्ष्य शुरू से बदल दिया जाता है, जिसका अर्थ है कि इसे मार दिया गया है।

यह थोड़ा अजीब है क्योंकि आपने रिप्सॉन्ज क्लॉज जोड़ दिया है इसलिए इसे रोकने के बाद फिर से शुरू करने का प्रयास करना चाहिए लेकिन यह कभी नहीं करता है। इसलिए मैं अनुमान लगा रहा हूं कि आपने रिस्पॉन्स क्लॉज को हटा दिया है।

केवल 2 सेवाओं को शुरू करने और रोकने के लिए pms सेवा के बीच ufw और नेटवर्क-इंटरफ़ेस (eth0) शुरू किया जाता है, और 1 को udev-fallback- ग्राफिक्स शुरू किया जाता है।

ऐसा लगता है कि आप प्रक्रिया को समानांतर में शुरू कर रहे हैं। दुर्भाग्य से नवोदय प्रलेखन के बीच सटीक मतभेदों पर एक छोटा सा धुंधला है start on ...वेनिला और start on starting ...और start on started ...

अपने स्टार्टअप श्लोक को बदलने का प्रयास करें

start on started networking

या अभी भी

start on net-device-up IFACE=eth0

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

यह सुनिश्चित करना चाहिए कि सभी नेटवर्क सेट अप समाप्त हो जाने के बाद ही आपकी प्रक्रिया शुरू हो जाए अर्थात नौकरी न केवल शुरू हो गई बल्कि समाप्त हो गई।

लॉग आउटपुट पर पूरी तरह से भरोसा न करें, बूट प्रक्रिया में किसी भी फ़ाइल में लॉगिंग आउटपुट हमेशा काम नहीं करता है। डीबगिंग अपस्टार्ट में उत्तर देखें


3

इसके बजाय रनवे पर स्टार्ट का उपयोग करके इसी तरह की समस्या को ठीक करने में कामयाब:

start on runlevel [2345]

3

मेरे पास एक ही समस्या थी और अंततः मैंने इसे बस हल किया:

start on runlevel [2345]

किसी भी बिना net-device-upया started networkingसामान

यह पूरी अपस्टार्ट स्क्रिप्ट है, और यह पूरी तरह से काम करती है:

# MyApp

description     "MyApp"
author          "me"

start on runlevel [2345]
stop on runlevel [016]

respawn

exec /usr/bin/myapp 2>> /var/logs/myapp.log

1

मैं chkconfigअपने आरसीएसए / सीई प्रशिक्षण के दौरान भर में आया :

sudo apt-get install chkconfig
sudo chkconfig pms on

आप इसकी क्षमताओं के बारे में अधिक जानकारी के लिए यह वनिरिक मैन पेज देख सकते हैं ।


1

मुझे इसके लिए एक समाधान मिल गया है लेकिन मैं इसे नहीं समझता। अगर मैं मालिक के रूप /home/administratorमें पीएमएस /bin/pmsको जड़ से बाहर और अंदर स्थानांतरित करता हूं , तो यह सब ठीक काम करता है।

अगर मैं इसे छोड़ देता हूं, /home/administrator/लेकिन यह सुनिश्चित कर लेता हूं कि रूट /home/administrator/ही डायरेक्टरी के मालिक के रूप में सब कुछ का मालिक है, तब भी यह काम नहीं करता है।

यदि मैं व्यवस्थापक को सब कुछ के स्वामी के रूप में सेट करता हूं और अपनी स्क्रिप्ट के प्रासंगिक भाग को इसमें परिवर्तित करता हूं:

sudo su administrator -c '/home/administrator/pms-current/PMS.sh'

यह अभी भी काम नहीं करता है।

मुझे लगता है कि अब मैं एक /home/root/निर्देशिका बनाऊंगा और वहां सब कुछ स्थानांतरित करूंगा, हालांकि मैं वास्तव में इसे पूरी तरह से समझना चाहता हूं।


तो chkconfigया तो काम नहीं किया? क्या आपने निर्देशिका देने की कोशिश की PMS.shजड़ में था? यदि केवल आपका समाधान काम करता है, तो अपस्टार्ट के लॉन्चपैड पेज पर जाएं और सीधे देवों से संपर्क करें।
17

और अगर यह पर्याप्त है .shतो बस वहां से सब कुछ छोड़ दें और स्क्रिप्ट को उस निर्देशिका को इंगित करने के लिए संपादित करें (या शायद निर्देशिका को भी बदल दें!)।
ऑक्सीविवि

हां, मैंने रूट द्वारा स्वामित्व वाली संपूर्ण पीएमएस निर्देशिका बनाने की कोशिश की। संभवतः यह काम नहीं किया क्योंकि / घर / व्यवस्थापक / जड़ के स्वामित्व में नहीं है।
कैंट बूगार्ट

यह वैसे भी समझ में नहीं आता है, मैं नियमित रूप से समस्याओं के बिना upstart के माध्यम से मेरे / घर निर्देशिका में स्क्रिप्ट चलाते हैं।
व्यवस्थित करें

यहां तक ​​कि अजनबी: मैंने सिर्फ / घर / जड़ के तहत सब कुछ करने की कोशिश की / जो जाहिर तौर पर जड़ के स्वामित्व में है। काम नहीं किया। मैंने सब कुछ वापस / बिन / पीएमएस के तहत स्थानांतरित कर दिया और फिर से काम किया। तो ऐसा लगता है कि अंडर / होम से पीएमएस को उखाड़ने की कोशिश मेरे सिस्टम पर काम नहीं कर रही है।
कैंट बूगार्ट

1

मुझे एक समान "कोई शुरुआत" समस्या नहीं थी जब मुझे एहसास हुआ कि मेरी स्क्रिप्ट एक फ़ाइल पर निर्भर थी जो मेरे घर में थी, और घर सुलभ नहीं था क्योंकि मानक ubuntu तंत्र (.Pirt) के साथ क्रिप्ट किया गया था।

start on local-filesystems घटना (शायद) डिक्रिप्शन प्रक्रिया समाप्त होने से पहले उत्सर्जित होती है।


1

क्या एनएफएस पर आपके घर की निर्देशिका है? कभी-कभी रूट NFS तक पहुंच नहीं सकता है।

रिकॉर्ड के लिए, मेरे छोटे परीक्षण में अभी 12.04 पर:

  • start on started networkingऔर start on network-interface-up INTERFACE=eth0 काम नहीं करते, लेकिन

  • start on started network-interface INTERFACE=eth0 कर देता है।

Http://os4.org/wiki/upstart.html को इंगित करने के लिए धन्यवाद कि initctl list हमेशा रोका गया जॉब नेटवर्किंग दिखाता है।


संदर्भित लिंक टूट गया है।
SLM

0

मेरे मामले में, upstart सेवा योनि सिंक किए गए फ़ोल्डर में स्थित स्क्रिप्ट पर निर्भर थी । निम्नलिखित लाइन का उपयोग करके समस्या का समाधान किया:

start on vagrant-mounted

अधिक जानकारी: http://razius.com/articles/launching-services-after-vagrant-mount/


0

@Xuhcc के समान, मैं यह जानने के लिए यहां आया था कि मेरी वज्र्ट अपस्टार्ट स्क्रिप्ट क्यों नहीं चल रही थी। निम्नलिखित काम करने वाला है:

योनि-घुड़सवार पर शुरू करें

लेकिन निम्नलिखित बग के कारण कुछ बिल्ड में नहीं है।

https://github.com/mitchellh/vagrant/issues/6074

रिपोर्ट में सूचीबद्ध वर्कअराउंड ने मेरे लिए बहुत काम किया:

$ cat /etc/init/workaround-vagrant-bug-6074.conf 
# workaround for https://github.com/mitchellh/vagrant/issues/6074
start on filesystem
task

env MOUNTPOINT=/vagrant

script
  until mountpoint -q $MOUNTPOINT; do sleep 1; done
  /sbin/initctl emit --no-wait vagrant-mounted MOUNTPOINT=$MOUNTPOINT
end script

मेरे लिए बहुत अच्छा काम किया


0

इसने मेरे लिए काम किया (मुझे iface के बाद स्टार्ट सेवा की आवश्यकता है):

start on started networking and net-device-up IFACE=wlan1 
stop on shutdown

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