32

UbuntuでApacheを起動しようとすると、このエラーが発生します。

 (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.

私はports.confにこれを持っています

NameVirtualHost *:80
Listen 80

これは私の仮想ホストファイルです

<VirtualHost *:80>
          ServerAdmin example@example.com
          ServerName rails.server.com
          # ServerAlias
          DocumentRoot /var/www/sample_app/current/public
          ErrorLog /var/www/sample_app/error.log

          RailsEnv production
        <Directory "/var/www/sample_app/current/public">
          Options Indexes FollowSymLinks MultiViews
          Order allow,deny
          Allow from all
        </Directory>
</VirtualHost>

私は何が欠けていますか?

4

14 に答える 14

69
netstat -ltnp | grep :80

これは以下を返します。

tcp6 0 0 :::80 :::* リッスン 1047/apache2

次に、次のコマンドを実行します。

sudo kill -9 1047

(1047 - pid 番号)

(特定のインスタンスに表示される pid。)

アパッチを再起動します。

sudo service apache2 restart

Ubuntu フォーラムへの参照。

于 2013-05-31T04:46:46.460 に答える
12

ポート 80 は既に使用されているようです。別のポートを使用するか、試してみてnetstat(grep値が 80 の行のみを選択する結果)、ポートpskill占有しているアプリケーションを確認してシャットダウンします。

于 2012-05-24T22:00:43.953 に答える
12

いずれの場合も、ポート 80 を使用するプロセスが再起動され、ポートの使用が許可されないため、プロセスを強制終了しても機能しない可能性があります。したがって、問題がなければ、apache のポートを変更することができます。

そのために次の 2 点を変更します。

  1. 任意のテキスト エディタで開き/etc/apache2/ports.conf、エントリの値をListen 80目的のポート (例: Listen 8080) に変更します。

  2. のエントリを、ファイルで<virtualhost 80>指定したのと同じポート番号に変更します(例: )。/etc/apache2/ports.conf/etc/apache2/sites-enabled/000-default<virtualhost 8080>

于 2012-11-26T04:10:11.903 に答える
6

私の場合、それはnginxでした(サーバーにあるため)。

sudo service nginx stop
sudo service apache2 start
于 2016-08-23T19:57:41.523 に答える
4
sudo netstat -tulpn| grep :80

pkillプロセス (nginx?)

不要なポート 80 にバインドしている仮想ホストを無効にします (nginx?)。/etc/nginx/sites-enabled または /etc/apache2/sites-enabled にあります

于 2012-06-20T20:42:15.187 に答える
1

sudo kill -9 -2321 (pid) BT を再起動します 完了.....conf を変更する必要はありません。ファイル。

于 2013-07-14T23:15:54.830 に答える
0

apache2 の起動時に、Ubuntu 12.10 の新規インストールでこのエラーが発生しました。

apache2 のバグです。バックグラウンドでハングアップします。これは、バグがソフトウェアのどこにある可能性があるかについての私のウォークスルーです。

これが私が得たエラーです:

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.

そのため、Ubuntu は起動時に apache2 を管理するのに問題があるようです。apache2 を停止する時間:

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

大きな手がかり!apache2 を停止しようとすると、プロセス ID が失われました! そのため、Ubuntu は apache2 がどこにあるかわからないため、apache2 を停止できません。

再起動すれば直ると思うかもしれませんが、起動時にapache2が起動してハングするため、そうではありません。apache2 の通常の起動プロセスが正しく機能していません。

それで、それを修正する方法は?

psコマンド出力を分析することで、これを修正できました。psこのコマンドは、そのプロセスが「/etc/rc2.d/S91apache2 start」によって開始されたことを示していること に注意してください。

それは素早いキックを必要とする問題のあるプログラムです。

/etc/rc2.d/S91apache2は、コンピューターの起動時に apache2 を起動するために使用されるシンボリック リンクです。何らかの理由で、apache2 を起動しているように見えてからハングします。そのため、そうしないように指示する必要があります。

それを見てみましょう/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

コンピューターを再起動して、apache2 が起動してハングしないことを確認します。いいよ。これで、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

代わりに、次のように apache2 を起動します。

sudo service apache2 start

そして、apache2 がバックアップされ、ページが再び提供されます。apache2/Ubuntu 12.10 には、apache2 が起動してハングする重大なバグがあるようです。これは回避策です。修正は、新しいバージョンの apache2 と Ubuntu を入手して、最善を尽くすことだと思います。

于 2014-01-05T18:16:10.273 に答える
0

私の場合、デフォルトのssl.confファイル (名前を に変更ssl.conf.bak) を削除し、独自の ssl 構成ファイルを作成しました。

それから私はyum updateapache を更新しました...これはまた、ファイルを再導入しました。ssl.confつまり、Listen 443.

解決策 (汎用 - CentOS): に移動し/etc/httpd/conf.d、 を実行しgrep -r 'Listen' .、重複Listen XXXしたステートメントがあるかどうかを確認し、必要に応じてそれらを削除します。

于 2014-04-07T18:29:22.487 に答える
0

私は非常に異なる原因で同じ問題を抱えていました。CentOS 6.5 で PHP 5.5.6 を使用して Apache 2.4.7 を実行しています。

output_handler=ob_gzhandler と zlib.output_compression=On の両方を設定して php.ini を台無しにしました (両方ではなく、どちらか一方を設定できます)。

そのため、Apache を再起動すると、ポート 80 にバインドされますが、他には何も起こりません。実行されているように見えますが、php のエラーでどこかにロックされています。

手がかりは「php -v」をチェックすることでした...何も返さないのを見たとき(エラーをerror_logに書き込んだ)、php.iniを修正したところ、Apacheは再び満足しました。

多分これは誰かを助ける...

于 2013-12-20T07:30:26.397 に答える