अपाचे शुरू करने में विफल, पहले से ही उपयोग में पता (लेकिन वास्तव में नहीं)


58

मैं एक VM को Ubuntu 12.04 चलाने की कोशिश कर रहा हूं। मेरे पास पोर्ट 80 का उपयोग करके कॉन्फ़िगर किए गए दो वर्चुअल होस्ट हैं, लेकिन अपाचे शुरू नहीं होंगे।

मुझे यह त्रुटि मिली:
(98) Address already in use: make_sock: could not bind to address 0.0.0.0:80

यह netstat -tulpnदर्शाता है कि कुछ भी पोर्ट 80 का उपयोग नहीं कर रहा है। संभवतः इसका क्या कारण हो सकता है?


क्या आप इसे जड़ के रूप में शुरू कर रहे हैं? डिफ़ॉल्ट रूप से केवल रूट 1024 से नीचे पोर्ट खोल सकता है।
15

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

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

क्या आपने शुरू की अपाचे विफलताओं के सुझावों की कोशिश की है (0.0.0.0:80 को संबोधित करने के लिए बाध्य नहीं किया जा सकता है) ? और यह भी के उत्पादन में शामिल करें grep -ri listen /etc/apacheऔर sudo netstat -ntlp | grep 80
gertvdijk 19

2
grep -ri listen /etc/apache2आउटपुट: etc / apache2 / httpd.conf: 80 /etc/apache2/httpd.conf सुनें: 443 /etc/apache2/ports.conf सुनें: 80 /etc/apache2/httpd.conf सुनें: 443 / etc / apache2 / सुनें। httpd.conf: सुनो 443 sudo netstat -ntlp | grep 80आउटपुट कुछ भी नहीं है।
गनर बार्न्स

जवाबों:


38

सुनिश्चित करें कि आप Listen 80.conf फ़ाइलों में दो बार घोषित नहीं कर रहे हैं ।

उदाहरण के लिए, आपके पास यह ports.confऔर सराय दोनों हो सकता है sites-enabled/www.conf

पता लगाने के लिए, उपयोग करें: grep -ri listen /etc/apache2

Listen 80सिर्फ एक ही जगह पर रखें ।


19

जिस तरह से मैंने इस मुद्दे का हल निकाला है। भविष्य में किसी के लिए सहायक हो सकता है।

प्रयत्न, कोशिश netstat -ltnp | grep :80

यह कुछ इस तरह लौटेगा

tcp6 0 0 ::: 80 ::: * LISTEN 1047 / apache2

तो भागो

sudo kill -9 1047

जहां 1047 पोर्ट 80 पर चलने वाले प्रोग्राम की पिड है। आप उस पीड को रिप्लेस कर सकते हैं जो आपने प्राप्त किया था netstat


वाह! ... और यहाँ मैं tomotionhosting का टिकट भेजने के 48 घंटे बाद और उत्तर की प्रतीक्षा कर रहा हूँ। धन्यवाद
Amjo

2
इसका क्या मतलब है? मुझे पीआईडी ​​या नाम नहीं मिल रहा है। tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN -
एरोन फ्रेंके

@AaronFranke क्या आप विंडो को अधिकतम करने के बाद टर्मिनल में इस कमांड को चलाने की कोशिश कर सकते हैं?
बेनामी प्लैटिपस

2
@AaronFranke इसे सुडो के साथ चलाते हैं। आपके पास देखने की अनुमति नहीं हो सकती है।
अद्वैत एस

13

जब मुझे यह समस्या थी, तो यह पता चला क्योंकि मेरी अपाचे बूट पर शुरू नहीं हो सकती थी क्योंकि मेरे पास एक एसएसएल साइट थी जिसे प्रमाण पत्र के लिए एक पासवर्ड दर्ज करने की आवश्यकता थी।

यह बताने का एक अच्छा तरीका है कि क्या आपके लिए यह मामला है ps -ef | grep apache: a : यदि यह रिटर्न प्रक्रिया ऐसी दिखती है, जैसे कि /bin/bash /usr/share/apache2/ask-for-passphrase mysite.com:443 RSAयह एक टर्मिनल में दर्ज किए जाने वाले पासवर्ड की प्रतीक्षा कर रहा है, जिसे आप कभी नहीं देखेंगे।

सबसे पहले, मैंने त्रिशंकु प्रक्रिया को मार डाला ( kill -HUPअन्य लोगों को भी मारने के लिए / usr / sbin / apache2 प्रक्रिया के लिए प्रक्रिया आईडी भेजने के लिए पर्याप्त होना चाहिए, लेकिन एक ps -ef | grep apacheऔर सुनिश्चित करने के लिए)।

फिर मैंने एक एसएसएल पासवर्ड फ़ाइल बनाने के लिए इस पोस्ट में निर्देशों का पालन किया जिसमें पासवर्ड दर्ज करने की आवश्यकता नहीं थी। फिर एक service apache2 startठीक काम, और अपाचे ने रिबूट के बाद ठीक से शुरू किया।


11

Apache2 Ubuntu 12.10 को शुरू करने पर मुझे यह त्रुटि एक नए इंस्टाल पर मिली।

यह Apache2 में एक बग है। यह पृष्ठभूमि में लटका हुआ है। यहाँ मेरा walkthrough है जहाँ बग सॉफ़्टवेयर में हो सकता है।

यहाँ मुझे मिली त्रुटि है:

el@titan:~$ sudo service apache2 start
 * Starting web server apache2               
(98)Address already in use: make_sock: could not bind to address 0.0.0.0:80
no listening sockets available, shutting down
Unable to open logs
Action 'start' failed.
The Apache error log may have more information.
                                                                         [fail]

पता पहले से प्रयोग में है? इसका उपयोग क्या हो सकता है? इसकी जांच - पड़ताल करें:

el@titan:~$ grep -ri listen /etc/apache2
/etc/apache2/apache2.conf:#   supposed to determine listening ports for incoming connections, and which
/etc/apache2/apache2.conf:# Include list of ports to listen on and which to use for name based vhosts
/etc/apache2/ports.conf:Listen 80
/etc/apache2/ports.conf:    Listen 443
/etc/apache2/ports.conf:    Listen 443

इसका मतलब है कि apache2 शुरू से apache2 को रोक रहा है। विचित्र। यह पुष्टि करेगा:

el@titan:~$ ps -ef | grep apache2
root      1146   954  0 15:51 ?        00:00:00 /bin/sh /etc/rc2.d/S91apache2 start
root      1172  1146  0 15:51 ?        00:00:00 /bin/sh /usr/sbin/apache2ctl start
root      1181  1172  0 15:51 ?        00:00:00 /usr/sbin/apache2 -k start
root      1193  1181  0 15:51 ?        00:00:00 /bin/bash /usr/share/apache2/ask-for-passphrase 127.0.1.1:443 RSA
el        5439  5326  0 16:23 pts/2    00:00:00 grep --color=auto apache2

हां, इस मामले में apache2 चल रहा है, मैं उसी पोर्ट पर दूसरी बार apache2 शुरू करने की कोशिश कर रहा था।

मुझे क्या भ्रमित करता है कि serviceरिपोर्ट है कि apache2 नहीं चल रहा है:

el@titan:~$ sudo service apache2 status
Apache2 is NOT running.

और जब आप अपने स्टेटस के लिए apache2ctl को क्वेरी करते हैं, तो यह हैंग हो जाता है।

root@titan:~# /usr/sbin/apache2ctl status
**hangs until Ctrl-C is pressed.

तो उबंटू को अपाचे 2 को बूटअप पर प्रबंधित करने में परेशानी हो रही है। Apache2 को रोकने का समय:

root@titan:~# /usr/sbin/apache2ctl stop
httpd (no pid file) not running

एक बड़ा सुराग! आप apache2 को रोकने की कोशिश करते हैं और यह प्रक्रिया आईडी खो गई है! तो उबंटू Apache2 को रोक नहीं सकता क्योंकि यह नहीं जानता कि यह कहां है!

आपको लगता है कि एक रिबूट इसे ठीक कर देगा, लेकिन ऐसा नहीं है क्योंकि अपाचे 2 बूट पर शुरू होता है और लटका रहता है। Apache2 के लिए सामान्य बूट प्रक्रिया सही काम नहीं कर रही है।

तो इसे कैसे ठीक करें?

मैंps कमांड आउटपुट का विश्लेषण करके इसे ठीक करने में सक्षम था । ध्यान दें कि psकमांड हमें बताता है कि यह प्रक्रिया "/etc/rc2.d/S91apache2 start" द्वारा शुरू की गई थी।

यह अपमानजनक कार्यक्रम है जिसमें एक तेज किक की जरूरत है।

/etc/rc2.d/S91apache2कंप्यूटर शुरू होने पर आपके लिए apache2 शुरू करने के लिए इस्तेमाल किया जाने वाला प्रतीकात्मक लिंक है। किसी कारण से यह अपाचे 2 शुरू होता है और फिर लटक जाता है। तो हमें यह बताना होगा कि ऐसा न करें।

तो उस पर एक नज़र रखना /etc/rc2.d/S91apache2

el@titan:/etc/rc2.d$ ls -l
lrwxrwxrwx   1 root root    17 Nov  7 21:45 S91apache2 -> ../init.d/apache2*

यह एक प्रतीकात्मक कड़ी है जिसे हम नहीं चाहते कि वह वहां हो। Apache2 को बूट पर शुरू होने से रोकने के लिए ऐसा करें:

root@titan:~# sudo update-rc.d -f apache2 remove
 Removing any system startup links for /etc/init.d/apache2 ...
   /etc/rc0.d/K09apache2
   /etc/rc1.d/K09apache2
   /etc/rc2.d/S91apache2
   /etc/rc3.d/S91apache2
   /etc/rc4.d/S91apache2
   /etc/rc5.d/S91apache2
   /etc/rc6.d/K09apache2

कंप्यूटर को रिबूट करें यह सुनिश्चित करने के लिए कि अपाचे 2 शुरू और लटका नहीं है। ठीक अच्छा। अब आप COULD को apache2 वापस रख सकते हैं जिस तरह से यह था, लेकिन यह फिर से विफल हो जाएगा।

root@titan:~$ sudo update-rc.d apache2 defaults     //(don't do this)
 Adding system startup for /etc/init.d/apache2 ...
   /etc/rc0.d/K20apache2 -> ../init.d/apache2
   /etc/rc1.d/K20apache2 -> ../init.d/apache2
   /etc/rc6.d/K20apache2 -> ../init.d/apache2
   /etc/rc2.d/S20apache2 -> ../init.d/apache2
   /etc/rc3.d/S20apache2 -> ../init.d/apache2
   /etc/rc4.d/S20apache2 -> ../init.d/apache2
   /etc/rc5.d/S20apache2 -> ../init.d/apache2

इसके बजाय, अपाचे 2 को इस तरह शुरू करें:

sudo service apache2 start

और अपाचे 2 वापस आ गया है और फिर से पृष्ठों की सेवा कर रहा है। Apache2 / Ubuntu 12.10 के साथ कुछ गंभीर बग प्रतीत होते हैं जो apache2 को शुरू करने और लटकने का कारण बनता है। यह एक वर्कअराउंड है, मुझे लगता है कि यह फिक्स अपाचे 2 और उबंटू के नए संस्करणों को प्राप्त करने और सर्वश्रेष्ठ के लिए आशा है।


पढ़ने और अपने सुझावों का उपयोग करने का आनंद लिया! 'जिस तरह से आपने इसे डीबग किया है' लिखने के लिए धन्यवाद!
राम

10

मेरे पास मेरे AWS EC2 सर्वर पर सुनने के लिए एक Nginx सर्वर था, मुझे लगता है कि जब मैं EC2 का निर्माण कर रहा था तो यह कॉन्फ़िगर हो गया था, इसलिए मुझे उपयोग त्रुटि में पहले से ही पता मिल रहा था। इसलिए मैंने सेवा बंद कर दी और Apache2 सेवा शुरू की:

sudo service nginx stop
sudo service apache2 start

अनेक अनेक धन्यवाद! सभी कोशिशों के बाद मेरे लिए यह काम किया।
विवेक

4

मैंने इसका पता लगा लिया है। मैंने अपने httpd.conf और ports.conf दोनों में 80 आज्ञाओं को सुना है

इसके अलावा, उस सर्वर के वर्चुअलाइज्ड फाइल को कॉपी करने के लिए जिसे वर्चुअलाइज्ड किया जा रहा है, मैंने यह नोटिस करने के लिए उपेक्षित किया कि त्रुटि लॉग निर्देशिका को बदल दिया गया था। उस त्रुटि लॉग को देखते हुए, मैंने देखा कि mime.typesमेरी httpd.confफ़ाइल में कॉन्फ़िगरेशन फ़ाइल के लिए निर्देशिका गलत थी । मैंने उस पैरामीटर को अपडेट किया, और सर्वर ठीक शुरू हुआ।


3
मेरे Listen 80दोनों httpd.confऔरports.conf
गनर बार्न्स

2

इसका मतलब है कि आप पोर्ट 80 का उपयोग पहले से ही कर रहे हैं, या तो apache2 के लिए पोर्ट को बदल दें (जो मैं अनुशंसा नहीं करता) संपादन द्वारा:

/etc/apache2/ports.conf

या पोर्ट 80 पर चल रहे एप्लिकेशन को बंद करें:

netstat -antp | grep 80

यह जानने के लिए कि पोर्ट 80 पर क्या चल रहा है।


netstat -antp | grep 80आउटपुट कुछ भी नहीं है।
गनर बार्न्स

क्या आप netstat -antp के अपने आउटपुट को कॉपी और पेस्ट कर सकते हैं | 80 grep?
डायलन डोड्स

सचमुच कोई आउटपुट नहीं है।
गनर बार्न्स

हम्म कि अजीब है, अगर यह पोर्ट अवरुद्ध नहीं हो रहा है तो 81 को पोर्ट बदलने की कोशिश करें। एक और त्रुटि है जिसे आप /ache/log/apache2/error.log में apache2 त्रुटियों की जांच कर सकते हैं
डायलन डॉड्स

2

किसी के लिए बस एक संकेत, जो शायद NAT नेटवर्क्स के साथ VirtualBox चल रहा है। मैंने पाया, अपने मेहमान और मेजबान के बीच NAT नियम होने से बंदरगाह को बांधना खुद को स्थापित करना था


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