SSH सत्रों से बाहर निकलने से अचानक अपाचे की मौत हो गई
ठीक है, यह एक डोज है। मैं Ubuntu 16.04 सर्वर इंस्टेंस पर Apache 2.4 चला रहा हूं। मैं उत्पादन और परीक्षण दोनों उदाहरणों के लिए समान-समान वातावरण का उपयोग करता हूं, साथ ही साथ एक समान-समान वर्चुअलबॉक्स उदाहरण भी हूं, जिसे मैं विकास के लिए वैग्रंट का उपयोग करके प्रबंधित करता हूं। सबसे लंबे समय तक, मैं इनमें से किसी भी सर्वर उदाहरण में SSH में सक्षम रहा हूं, जो Apache के अंतर्गत आता है, कुछ अनुप्रयोग कोड परिवर्तन लागू करता है, और उसके बाद exit
SSH सत्र समाप्त करने के लिए चलता है, और 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
में लॉग इन करने की आवश्यकता को सीमित करना था ।
मैं यहां पूरी तरह से नुकसान में हूं और समझ में नहीं आ रहा है कि अचानक सब कुछ कैसे टूट सकता है।
जवाब
इसका मूल कारण यह है कि कैसे प्रणाली (219 से) उपयोगकर्ताओं में लॉग इन द्वारा बनाई गई आईपीसी वस्तुओं को संभालती है। डिफ़ॉल्ट रूप से यह उपयोगकर्ता द्वारा लॉग आउट होने के बाद छोड़ी गई किसी भी आईपीसी वस्तुओं को हटा देगा। यह सभी गैर-प्रणाली उपयोगकर्ताओं (uid> = 1000) पर लागू होता है। सिस्टम उपयोगकर्ता (uid <1000) प्रभावित नहीं होते हैं।
चूंकि आपने अपाचे को एक गैर-सिस्टम उपयोगकर्ता के तहत चलाने के लिए बदल दिया है, जब भी आप उस उपयोगकर्ता खाते से लॉग आउट करते हैं, तो सिस्टमएड अपाचे की सभी आईपीसी वस्तुओं को नोक करता है, और अपाचे फिर अपने म्यूटेक्स को खोने के बारे में शिकायत करता है और मर जाता है।
आप इस व्यवहार RemoveIPC=no
को /etc/systemd/logind.conf
(Ubuntu पर डिफ़ॉल्ट yes
) सेट करके और पुनरारंभ करके बदल सकते हैं systemd-logind.service
।
सिस्टम उपयोगकर्ता (जैसे www-data
उबंटू पर) के रूप में चल रहे अपाचे को छोड़ना बेहतर है , और www-data
इसे पढ़ने / लिखने के लिए आवश्यक फाइलों को एक्सेस देने के लिए अनुमति और एसीएल का उपयोग करें।