अपस्टार्ट: गैर-अपस्टार्ट प्रक्रिया के बाद सेवा शुरू करना


11

उबंटू 10.04 पर, मुझे अपस्टार्ट के साथ अपनी सेवा शुरू करने की आवश्यकता है, लेकिन केवल तब जब mysql उठ रहा है और चल रहा है।

समस्या यह है कि mysql खुद को upstart द्वारा नियंत्रित नहीं किया जाता है, इसलिए मैं "स्टार्ट ऑन" सुविधा का उपयोग नहीं कर सकता।

मैं क्या कर सकता हूँ ?

जवाबों:


15

आपके पास कुछ विकल्प हैं:

1) mysql Upstart को सूचित करें कि यह एक घटना का उत्सर्जन करके शुरू किया है

initctl emit mysql-started" या इसी के समान।

यह initctlकरने के लिए मंगलाचरण जोड़कर नियंत्रित किया जा सकता है /etc/init.d/mysql

2) सामान्य SysV रनलेवल्स से mysql को डिसेबल करें और एक रैपर अपस्टार्ट जॉब बनाएं जो इसे शुरू करता है (यह रोक रोक नहीं करता है - सिर्फ एक उदाहरण):

cat >>/etc/init/mysql-sysv.conf<<EOT
  # wait for SysV job to finish
  start on stopped rc
  exec /etc/init.d/mysql start
EOT

फिर, अपना काम करो " start on started mysql-sysv"।

यहां समस्या यह है कि यदि कोई व्यक्ति (या कोई सिस्टम टूल स्वचालित रूप से) /etc/rc?.dमूल /etc/init.d/mysqlसेवा स्क्रिप्ट के लिंक को फिर से जोड़ता है तो आप परेशानी में पड़ जाएंगे । इसके अलावा, आप पा सकते हैं कि mysql वास्तव में तब तक तैयार नहीं होता जब तक कुछ समय बाद मुख्य पिंड शुरू नहीं हो जाता। डेटाबेस समस्याग्रस्त हैं क्योंकि उन्हें शुरू होने के बाद भी "ऑनलाइन" आने में कुछ समय लग सकता है (ट्रांज़िशन लॉग रिप्ले, आदि)।

3) एक अपस्टार्ट जॉब ("वेटर") बनाएं जो "स्टॉप आरसी पर शुरू करें" (यानी तब शुरू करें जब सभी एसवाईएसवी जॉब्स ने समाप्त होने का दावा किया हो) और फिर पोल के इंतजार में मायस्कल तैयार होने का इंतजार करता है, फिर बाहर निकलता है। अपनी नौकरी "बंद वेटर पर शुरू करें"।

4) mysql को Upstart जॉब (सबसे अच्छा विकल्प) में बदलें। यहाँ एक अपस्टार्ट mysql कॉन्फ़िगरेशन के लिए एक प्रारंभिक बिंदु है: https://github.com/devo-ps/init-scripts/tree/master/mysql/ubuntu


1
चारों ओर देखने के बाद, यह उत्तर मेरे पास मौजूद सभी विकल्पों को बताता है। इसके अलावा "Mysql शुरू किया" और उस समय के बीच के अंतर को इंगित करने के लिए धन्यवाद जब mysql वास्तव में उपलब्ध है। चलो देखते हैं कि # 4 पहले से ही कहीं कोशिश की गई थी।
फॉकन

विकल्प 3 के लिए "स्टार्ट वेटर पर स्टार्ट" की आवश्यकता होती है। रुका नहीं।
adeandrade

विकल्प 1 हमारे मॉडल को अच्छी तरह से फिट बैठता है! हम पहले अजगर स्क्रिप्ट के माध्यम से एक विन्यास सर्वर से सभी अपस्टार्ट स्क्रिप्ट डाउनलोड करते हैं os.system('/sbin/initctl emit consul-finished'), जो चलता है , फिर अन्य सेवाओं को शुरू करते हैंstart on consul-finished
CMag

उसके लिए धन्यवाद, मेरे दोस्त! मूल रूप से मैं समाप्त करने में सक्षम होने के लिए initctl emit cloud-init-finishedएक sysv सेवा को बदलने के लिए समाप्त हुआ
जोस

0

मेरा सुझाव है कि सभी गैर-अपस्टार्ट नौकरियों के समाप्त होने के बाद अपना काम शुरू करें :

start on started rc

/etc/init/rc.conf वह चीज है जो अपस्टार्ट के भीतर से गैर-अपस्टार्ट नौकरियों को शुरू करती है।

प्रॉप्स: /server//a/533481


-1

कैसे उपयोग के बारे में

pre-start exec /etc/init.d/mysql start

अपने ऊपर का काम के अंदर!


... जब mysql शुरू होता है तो जादुई रूप से अपस्टार्ट का काम शुरू नहीं करेगा ।
12

हाँ, वह नहीं है जो आपने पूछा था !!! आपने दूसरा रास्ता पूछा। कम से कम मुझे यह समझ में आया कि
काजी

मेरा अपस्टार्ट काम mysql पर नजर रखने और नीचे आने पर नोटिफिकेशन भेजने वाला है। मैं निगरानी कार्य के माध्यम से mysql को लॉन्च करने में थोड़ा असहज महसूस करता हूं
फॉकन

मुझे नहीं लगता कि पूरी तरह से गलत है। मैं कुछ इस तरह से करता हूँ: अगर स्क्रिप्ट शुरू हो तो! /etc/init.d/rabbitmq-server स्थिति और> / dev / null; तत्पश्चात /etc/init.d/rabbitmq-server start fi end script
maxadamo
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.