Apache başlatılamıyor, Adres zaten kullanımda (ancak gerçekten değil)


58

Ubuntu 12.04 çalıştıran bir VM kurmaya çalışıyorum. Bağlantı noktası 80 kullanılarak yapılandırılmış iki sanal ana bilgisayarım var, ancak Apache başlamıyor.

Bu hatayı alıyorum:
(98) Address already in use: make_sock: could not bind to address 0.0.0.0:80

Çıktılar netstat -tulpnhiçbir şeyin 80 numaralı bağlantı noktasını kullanmadığını gösterir. Buna neden olabilecek ne olabilir?


root olarak mı başlatıyorsun? Varsayılan olarak sadece root 1024 altındaki portları açabilir.
onse

Evet benim. Yapılandırılmış tek bir sanal ana bilgisayarım varken bir noktada çalışıyordu, bu yüzden sorunu çözmek için diğer sanal ana bilgisayarı kaldırdım, ancak bu konuda hiçbir şansım olmadı.
Gunner Barnes

80 numaralı bağlantı noktasında çalışan bir şeyiniz var mı ve konuk için köprü modundasınız? Bunu yapacağını bilmiyorum, ama muhtemel görünüyor
RobotHumans

Apache başlatılamadığında gelen önerileri denediniz mi (0.0.0.0:80 adresine bağlanamadı) ? Ve ayrıca çıktısını ekleyin grep -ri listen /etc/apacheve sudo netstat -ntlp | grep 80.
gertvdijk

2
grep -ri listen /etc/apache2çıkışlar: etc / apache2 / httpd.conf: Dinle 80 /etc/apache2/httpd.conf: Dinle 443 /etc/apache2/ports.conf: Dinle 80 /etc/apache2/httpd.conf: Dinle 80 / etc / apache2/httpd.conf: Dinle 803 / etc / apache2 / httpd.conf: 443'ü sudo netstat -ntlp | grep 80hiç bir şey çıkmadan dinle .
Gunner Barnes

Yanıtlar:


38

Listen 80.Conf dosyalarında iki kez beyan etmediğinizden emin olun .

Örneğin, hem içinde hem de ports.confhanda olabilir sites-enabled/www.conf.

Öğrenmek için şunları kullanın: grep -ri listen /etc/apache2

Listen 80Sadece tek bir yerde sakla .


19

Nasıl cevap verdiğim bu sorunu çözdüm. Gelecekte birine yardımcı olabilir.

Deneyin netstat -ltnp | grep :80

Bu gibi bir şey dönecekti

tcp6 0 0 ::: 80 ::: * 1047 / apache2 DİNLE

O zaman koş

sudo kill -9 1047

Bağlantı noktası 1047’de 80’in üzerinde çalışan programın pid’idir. netstat


vay! ... ve işte burada hareketsizliğe bir bilet gönderdikten ve cevap bekliyorum sonra 48 saatim. teşekkür ederim
Amjo

2
Ne anlama geliyor? PID veya isim alamıyorum. tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN -
Aaron Franke

@AaronFranke Lütfen bu komutu pencerede büyütmeyi yaptıktan sonra Terminal'de çalıştırmayı deneyebilir misiniz?
Anonim Platypus

2
@AaronFranke sudo ile çalıştırın. Görüntüleme izniniz olmayabilir.
Advait S

13

Bu sorunu yaşadığımda, Apache'm açılışta başlayamadığı, çünkü sertifika için şifre girilmesi gereken bir SSL sitesine sahip olduğum ortaya çıktı.

Sizin için durumun böyle olup olmadığını söylemenin iyi bir yolu, şu şekilde çalışmaktır ps -ef | grep apache: Bu, bunun gibi görünen süreçleri döndürürse /bin/bash /usr/share/apache2/ask-for-passphrase mysite.com:443 RSA, asla görmeyeceğiniz bir terminale bir şifre girilmesini bekler.

İlk önce, asılı işlemi öldürdüm ( kill -HUP/ usr / sbin / apache2 işlemi için bir işlem kimliğine bir tane göndermek , diğerlerini de öldürmek için yeterli olmalı, ancak ps -ef | grep apacheemin olmak için başka bir şey yapmalısınız ).

Ardından, şifre girilmesini gerektirmeyen bir SSL şifre dosyası oluşturmak için bu gönderideki talimatları takip ettim . Sonra service apache2 startiyi çalıştı ve Apache yeniden başlattıktan sonra düzgün bir şekilde başladı.


11

Apache2 Ubuntu 12.10 başlatırken yeni bir kurulumda bu hatayı aldım.

Bu apache2'de bir hata. Arka planda asılı kalıyor. İşte yazılımın içinde böceklerin bulunabileceği yerdeki ilerlemem.

İşte aldığım hata:

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]

Adres çoktan kullanımda? Ne kullanıyor olabilir? Bunu kontrol et:

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

Bu, apache2'nin apache2'nin başlamasını engellediği anlamına gelir. Tuhaf. Bu onaylayacaktır:

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

Evet, bu durumda apache2 çalışıyor, aynı portta ikinci kez apache2 başlatmaya çalışıyordum.

Beni serviceşaşırtan şey, apache2'nin çalışmadığını bildirmesidir:

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

Ve apache2ctl durumunu durumu için sorguladığınızda, kilitleniyor.

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

Yani Ubuntu açılışta apache2'yi yönetmekte sorun yaşıyor gibi görünüyor. Apache2'yi durdurma zamanı:

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

Büyük bir ipucu! Apache2'yi durdurmayı denersiniz ve işlem kimliği kaybolur! Böylece Ubuntu apache2'yi durduramaz çünkü nerede olduğunu bilmiyor!

Bir yeniden başlatma işleminin sorunu çözeceğini düşünürdünüz, ancak apache2 açılışta başladığından ve takıldığından dolayı değil. Apache2 için normal önyükleme işlemi doğru çalışmıyor.

Peki nasıl düzeltebilirim?

Bunu düzeltmek başardı analiz ederek pskomut çıktısını. psKomutun bize bu işlemin "/etc/rc2.d/S91apache2 start" tarafından başlatıldığını bildirdiğine dikkat edin .

Bu hızlı bir vuruş gerektiren rahatsız edici bir programdır.

/etc/rc2.d/S91apache2bilgisayar başlatıldığında sizin için apache2'yi başlatmak için kullanılan sembolik bağlantıdır. Bazı nedenlerden dolayı apache2'yi başlatıyor ve ardından kilitleniyor. Bu yüzden bunu yapmamasını söylemeliyiz.

Öyleyse şuna bir bak /etc/rc2.d/S91apache2.

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

Orada olmasını istemediğimiz sembolik bir bağlantı. Bunu apache2'nin önyüklemeye başlamasını önlemek için yapın:

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

Apache2'nin başlamadığından ve takılmadığından emin olmak için bilgisayarı yeniden başlatın. Tamam iyi. Şimdi, apache2'yi olduğu gibi geri koydunuz, ancak bu tekrar başarısızlığa uğratacaktır.

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

Bunun yerine, apache2'yi şu şekilde başlatın:

sudo service apache2 start

Ve apache2 tekrar yedekleniyor ve sayfalar sunuyor Apache2 / Ubuntu 12.10 ile apache2'nin başlatılmasına ve askıda kalmasına neden olan bazı ciddi hatalar var gibi görünüyor. Bu bir geçici çözümdür, düzeltmenin apache2 ve Ubuntu'nun daha yeni sürümlerini aldığını ve en iyisini umduğunu umuyorum.


İpuçlarını okumaktan ve kullanmaktan zevk aldım! 'Hata ayıkladığınız yolu' yazdığınız için teşekkür ederiz!
Ram,

10

AWS EC2 sunucumu dinleyen bir Nginx sunucum vardı, EC2'yi inşa ederken yapılandırıldığını düşünüyorum, bu nedenle Adres kullanımda zaten hata alıyorum. Bu yüzden servisi durdurdum ve Apache2 servisini başlattım:

sudo service nginx stop
sudo service apache2 start

Bir ton teşekkürler! Tüm denemelerden sonra bu benim için çalıştı.
Vivek

4

Anladım. Httpd.conf ve ports.conf dosyalarımda 80 Dinle komutunu kopyaladım

Ayrıca, sanallaştırılan sunucunun yapılandırma dosyasını kopyalarken, hata günlüğü dizininin değiştiğini fark etmeyi ihmal ettim. Bu hata günlüğüne bakarak, mime.typesconfig dosyası dizininin dosyamda yanlış olduğunu fark ettim httpd.conf. Bu parametreyi güncelledim ve sunucu iyi başladı.


3
Ayrıca yinelenen vardı Listen 80hem benim komutları httpd.confveports.conf
Topçu Barnes

2

Bu, 80 numaralı bağlantı noktanızın zaten kullanılmakta olduğunu gösterir, ya düzenleyerek apache2 bağlantı noktasını değiştirin (ki bu önerilmez):

/etc/apache2/ports.conf

Veya 80 numaralı bağlantı noktasında çalışan uygulamayı kapatın:

netstat -antp | grep 80

80 numaralı bağlantı noktasında nelerin çalıştığını bulmak için.


netstat -antp | grep 80hiçbir şey de çıkarmaz.
Gunner Barnes

netstat -antp çıktınızı kopyalayıp yapıştırabilirsiniz | grep 80?
Dylan Dodds

Kelimenin tam anlamıyla çıktı yok.
Gunner Barnes

hmm garip, eğer engellenen port değilse, portu 81 olarak değiştirmeyi deneyin /var/log/apache2/error.log içinde apache2 hatalarını kontrol edebileceğiniz başka bir hata var
Dylan Dodds

2

VirtualBox’u NAT ağları ile birlikte çalıştıran herkes için sadece bir ipucu. Konuk ile ev sahibi arasında bir NAT kuralı kurarken bağlantı noktasını bağlayarak kendiliğinden belirlediğimi öğrendim.


2

Sadece yinelenen söz değil

Listen 80

ama aynı zamanda 80 Dinle ek olarak söz

Include ports.conf
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.