मरने पर ऑटो को पुनः आरंभ करें


15

मेरे पास एक रैकस्पेस सर्वर है जिसे मैंने अपनी निजी परियोजनाओं को चलाने के लिए किराए पर लिया है। चूंकि मैं सस्ता हूं, इसमें 256Mb की रैम है और ईमानदारी से अलॉट नहीं कर सकते। हर बार एक समय में, जब ट्रैफ़िक में तेज उतार-चढ़ाव होता है, सर्वर हत्या प्रक्रियाओं को शुरू करने का फैसला करता है और ऐसा लगता है कि mysqld इसे मारने के लिए एक लोकप्रिय है। मैं अपनी साइट पर जाने का प्रयास करता हूं और संदेश के साथ अभिवादन करता हूं कि डेटाबेस कनेक्शन स्थापित करने में त्रुटि हुई थी। लॉग के निरीक्षण से पता चलता है कि स्मृति की कमी के कारण मायस्कल्ड की मौत हो गई थी।

चूंकि मैं आज भी उतना ही गरीब हूं जितना कि मैं कल था और अपने रैकस्पेस वीएम की रैम को अपग्रेड नहीं करना चाहता हूं, क्या ऐसा कोई तरीका है जो मैं यह बता सकता हूं कि जब यह मर जाता है तो मैं ऑटोमैटिकली मायस्कल्ड को पुनः आरंभ कर सकता हूं?

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

सर्वर CentOS 6.3 चलाता है


क्या बिगाड़ है? मुझे लगता है कि नवोदय ubuntu पर ऐसा होगा
जर्नीमैन गीक

ओह। उस विवरण का उल्लेख करना भूल गए: CentOS
लॉस फ्रिज़ोल्स

एह। संस्करण भी शामिल कर सकते हैं
जर्नीमैन गीक

प्रश्न से अलग नहीं होने के लिए, लेकिन शायद एक दीर्घकालिक समाधान इसके बजाय हालत से बचने के लिए होगा :) एक प्रदाता जो कम अंत में माहिर है। मैंने यह बहुत संतोष के साथ किया है। ऐसे VPS प्रदाताओं को खोजने के लिए कई स्थान हैं, उदाहरण के लिए lowendtalk.com।
जॉन चाडविक

जवाबों:


16

यह एक साफ समाधान नहीं है, यह स्पष्ट रूप से पहली जगह में समस्या से बचने के लिए बेहतर होगा। वैसे भी, मुझे यकीन नहीं है कि कैसे CentOS सेवाओं का प्रबंधन करता है, लेकिन मुझे लगता है कि यह उपयोग करता है service। यदि हां, तो आप जांच सकते हैं कि क्या mysqlसेवा चल रही है

/sbin/service mysql status

यह कमांड सफलतापूर्वक mysqlचल रहा है यदि मैं चल रहा हूं और यदि मैं नहीं हूं तो गैर 0 एग्जिट स्थिति लौटाएं। आप इसलिए सेवा शुरू कर सकते हैं यदि वह इस कमांड से नहीं चल रही है:

/sbin/service mysql status || service mysql start

आप /etc/crontabप्रति मिनट thes कमांड लॉन्च करने के लिए इस लाइन को जोड़ सकते हैं :

* * * * * /sbin/service mysql status || service mysql start


6

यह थोड़ा परेशान करने वाला है।

mysqld को mysqld_safe द्वारा हमेशा पुनरारंभ किया जाता हैक्योंकिmysqld_safeअसामान्य शटडाउन की जांच करनेकेलिएनीचे की ओर एक अनंत लूपहोता है। यदि त्रुटि बहुत गंभीर है, तोबाद के प्रयासों परmysqld_safeपुनः आरंभ करने में भी सक्षम नहीं होगाmysqld

उस स्थिति को देखते हुए जिसे mysqld_safeइसके लिए डिज़ाइन किया गया है, इसे mysqldशुरू करने के लिए बाध्य करने के लिए एक अच्छा विचार नहीं हो सकता है अगर mysqld_safeइसे वैसे भी अस्वीकार कर दिया जाएगा।

आपको my.cnf में त्रुटि लॉग का पता लगाना होगा

[mysqld]
log-error=log-filename

या

[mysqld_safe]
log-error=log-filename

पाठ फ़ाइल पढ़ें (संभवतः चलाकर tail -30 log-filename) और mysqld प्रसंस्करण के स्रोत को बंद करें।


दिलचस्प ... मेरे लॉग को देखकर यह कहता है कि mysqld को फिर से शुरू किया गया था, लेकिन फिर लगभग 1-2 घंटे बाद यह कहेगा कि प्रक्रिया समाप्त हो गई। उसके बाद अगला रिकॉर्ड मेरी मैनुअल शुरुआत का है। शायद मेरे पास mysqld_safe गलत कॉन्फ़िगर किया गया है?
लॉस फ्रेजोल्स

3

कम-मेमोरी वाले VPS पर चीजों को रखने और चलाने के लिए एक क्रूर बल प्रयास में, मैंने MySQL की जांच और पुनः आरंभ करने के लिए टेरोमेड के उत्तर में संशोधन का उपयोग किया ।

/sbin/service mysqld status || service mysqld restart

मैं बदलने के लिए की जरूरत mysqlके लिए mysqldकाम करने के लिए इसे पाने के लिए। इसके बिना मुझे त्रुटि मिलेगी, " ERROR! MySQL is running but PID file could not be found"।

मेरे CentOS 7.2 सिस्टम पर, /sbin/serviceरीडायरेक्ट होता है /bin/systemctl status, इसलिए निष्पादित करने के लिए निम्न कमांड तेज है।

/bin/systemctl status  mysqld.service || /bin/systemctl start  mysqld.service

मैंने सिस्टम के रूट क्रैटाब में निम्नलिखित पंक्ति जोड़ दी। यह हर मिनट की जाँच करता है यदि MySQL चल रहा है और stdout को null में रीडायरेक्ट करता है। सेवा शुरू करने से कुछ भी तब तक आउटपुट नहीं होगा जब तक कि कुछ गलत न हो जाए, इसलिए आखिरी कमांड पर अशक्त रीडायरेक्ट को जोड़ने की आवश्यकता नहीं है।

* * * * * /bin/systemctl status mysqld.service > /dev/null || /bin/systemctl start  mysqld.service

डबल कमांड का ||मतलब है ORऔर 2 कमांड को निष्पादित करेगा यदि पहला कमांड किसी तरह से विफल हो जाता है। (शून्य से अधिक एक निकास कोड लौटाता है।)

यह कहने की तरह है, "1 कमांड चलाएँ, या , यदि 1 कमांड किसी तरह विफल हो जाती है, तो दूसरी कमांड चलाएं"।

यह डबल एम्परसेंड के विपरीत है &&जो यह कहने जैसा है कि, "1 कमांड चलाएँ, और , यदि केवल 1 कमांड सफल रहा, तो दूसरा कमांड रन करें"।


1

निम्नलिखित jonnyreeves.co.uk से है :


और अपराधी php-fpm है! एक त्वरित Google ने इसी तरह के लक्षणों से पीड़ित एक और वर्डप्रेस ग्राहक पाया; सलाह php-fpm पूल कॉन्फ़िगरेशन (/etc/php-fpm.d/www.conf) को ट्वीक करने और pm कॉन्फ़िगरेशन को ट्वीक करने की थी। मुख्य परिवर्तन से स्थानांतरित करने के लिए था pm = dynamicकरने के लिए pm = ondemandएक साथ pm.max_childrenका मूल्य 5(कार्यकर्ता प्रति ~ 5% स्मृति के उपयोग को देख के आधार पर)। कॉन्फ़िगरेशन बदलने के बाद मैंने सभी सेवाओं को फिर से शुरू किया और मेमोरी उपयोग की जांच की।

service php-fpm restart
service nginx restart
service mariadb restart

स्मृति उपयोग को पुनः आरंभ करने के बाद नाटकीय रूप से कम था।

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