SSH सत्रों से बाहर निकलने से अचानक अपाचे की मौत हो गई

Aug 18 2020

ठीक है, यह एक डोज है। मैं Ubuntu 16.04 सर्वर इंस्टेंस पर Apache 2.4 चला रहा हूं। मैं उत्पादन और परीक्षण दोनों उदाहरणों के लिए समान-समान वातावरण का उपयोग करता हूं, साथ ही साथ एक समान-समान वर्चुअलबॉक्स उदाहरण भी हूं, जिसे मैं विकास के लिए वैग्रंट का उपयोग करके प्रबंधित करता हूं। सबसे लंबे समय तक, मैं इनमें से किसी भी सर्वर उदाहरण में SSH में सक्षम रहा हूं, जो Apache के अंतर्गत आता है, कुछ अनुप्रयोग कोड परिवर्तन लागू करता है, और उसके बाद exitSSH सत्र समाप्त करने के लिए चलता है, और Apache ठीक बाद में चल रहा होगा । अब, हालांकि, मैं exitअपाचे सेवा के बिना एक घातक त्रुटि का सामना नहीं कर सकता :

[mpm_prefork:emerg] [pid 23466] (43)Identifier removed: AH00144: couldn't grab the accept mutex
[core:alert] [pid 17750] AH00050: Child 23466 returned a Fatal error... Apache is exiting!

टिप्पणियाँ:

  • Apache यूजर है app
  • अगर मैं SSH के रूप में app, स्विच करने के लिए root, restartके रूप में सेवा root, वापस करने के लिए स्विच app, तो सत्र समाप्त, यह अपाचे को मारता है।
  • के रूप में मैं SSH हैं root, restartसेवा, तब सत्र समाप्त, अपाचे ठीक है।
  • मैं SSH हैं के रूप में root, restartसेवा, करने के लिए स्विच app, स्विच वापस करने के लिए rootहै, तब सत्र समाप्त, अपाचे ठीक है।
  • यदि मैं SSH के रूप में सेवा करता हूं root, restartसत्र समाप्त करता हूं , SSH फिर से app, फिर सत्र को समाप्त करता हूं , यह Apache को मारता है।
  • इस सप्ताह से पहले, मैं लगातार SSH के रूप में app, स्विच करने root, restartसेवा के रूप में root, और अपाचे को मारने के बिना सत्र को समाप्त करने में सक्षम रहा हूं ।
  • मैंने /lib/systemd/system/apache2.service.d/apache2-systemd.confलाइन RemainAfterExit=noको संशोधित करने और बदलने की कोशिश की है RemainAfterExit=yes, प्रदर्शन किया है systemctl daemon-reload, और अंत में service apache2 restartबिना किसी प्रभाव के।

क्या व्यवहार में अचानक बदलाव के लिए कुछ स्पष्टीकरण है? क्या पिछले व्यवहार को बहाल करने के लिए एक उचित निर्धारण है? यदि नहीं, तो एप्लिकेशन कोड में परिवर्तन को लागू करने और Apache ( appउपयोगकर्ता) के लिए अनुमतियाँ देने के लिए इसे SSH सत्र में लॉग इन करने की आवश्यकता के बिना इसे पढ़ने के लिए सबसे अच्छा अभ्यास क्या होगा root? लॉग इन करने का पूरा कारण पहली जगह के appरूप rootमें लॉग इन करने की आवश्यकता को सीमित करना था ।

मैं यहां पूरी तरह से नुकसान में हूं और समझ में नहीं आ रहा है कि अचानक सब कुछ कैसे टूट सकता है।

जवाब

25 MichaelHampton Aug 18 2020 at 09:43

इसका मूल कारण यह है कि कैसे प्रणाली (219 से) उपयोगकर्ताओं में लॉग इन द्वारा बनाई गई आईपीसी वस्तुओं को संभालती है। डिफ़ॉल्ट रूप से यह उपयोगकर्ता द्वारा लॉग आउट होने के बाद छोड़ी गई किसी भी आईपीसी वस्तुओं को हटा देगा। यह सभी गैर-प्रणाली उपयोगकर्ताओं (uid> = 1000) पर लागू होता है। सिस्टम उपयोगकर्ता (uid <1000) प्रभावित नहीं होते हैं।

चूंकि आपने अपाचे को एक गैर-सिस्टम उपयोगकर्ता के तहत चलाने के लिए बदल दिया है, जब भी आप उस उपयोगकर्ता खाते से लॉग आउट करते हैं, तो सिस्टमएड अपाचे की सभी आईपीसी वस्तुओं को नोक करता है, और अपाचे फिर अपने म्यूटेक्स को खोने के बारे में शिकायत करता है और मर जाता है।

आप इस व्यवहार RemoveIPC=noको /etc/systemd/logind.conf(Ubuntu पर डिफ़ॉल्ट yes) सेट करके और पुनरारंभ करके बदल सकते हैं systemd-logind.service

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