これは私の問題の最初の兆候です:
$ Sudo /sbin/service httpd restart
Stopping httpd: [FAILED]
Starting httpd: no listening sockets available, shutting down
Unable to open logs
[FAILED]
httpdが実行されていることを知っています
$ ps -ef | grep httpd | grep -v grep
Apache 9619 20181 0 07:08 ? 00:00:03 /usr/sbin/httpd
Apache 10092 20181 0 Jan24 ? 00:00:07 /usr/sbin/httpd
Apache 13086 20181 0 06:09 ? 00:00:00 /usr/sbin/httpd
Apache 13717 20181 0 Jan25 ? 00:00:01 /usr/sbin/httpd
Apache 14730 20181 0 07:13 ? 00:00:01 /usr/sbin/httpd
Apache 16359 20181 0 09:54 ? 00:00:00 /usr/sbin/httpd
root 20181 1 0 2011 ? 00:00:01 /usr/sbin/httpd
Apache 21450 20181 0 09:55 ? 00:00:00 /usr/sbin/httpd
ポート80と443を使用しています
$ Sudo netstat -lnp | grep :80
tcp 0 0 :::80 :::* LISTEN 9619/httpd
$ Sudo netstat -lnp | grep :443
tcp 0 0 :::443 :::* LISTEN 9619/httpd
httpdがポート80と443を解放するために停止できないため、「利用可能なリスニングソケットがありません」というメッセージが表示されると思います。
RHELバージョン5.7を使用しています:
$ cat /etc/redhat-release
Red Hat Enterprise Linux Server release 5.7 (Tikanga)
httpdで実行されている一連のプロセスを確認できます。
$ pgrep httpd
9619
10092
13086
13717
14730
16359
20181
21450
何がhttpdを停止させないのでしょうか? httpdのプロセスを強制終了した場合、問題なくhttpdを起動できますか?
/etc/init.d/httpdの停止関数はpidfileを使用します。
killproc -p ${pidfile} -d ${STOP_TIMEOUT} $httpd
おそらく、pidfile /var/run/httpd.pid
が古くなっている、または欠落している可能性があります(/etc/init.d
スクリプトまたはservice
?を使用せずに、過去にhttpdを起動したことがありますか?)そのファイル(およびその内容)はps -ef |grep http
で確認できます。
えっと、ただSudo kill 20181
。次に、通常どおりにサービスを起動します。その後、再起動してみてください。
それが再び発生する場合は、おそらく、pidファイルがプロセステーブルを使用して無力になっている理由を調査する必要があります。
Ispconfig3とApacheを使用してcentos6で同様に実行しました。 cjcの投稿は、私の答えを見つけるのに役立ちました。 (ありがとう!)何らかの理由で、/ etc/httpd/conf/httpd.confのPIDパスが/etc/init.d/httpdのPIDパスと異なることがわかりました。それらを同じにした後(私はinit.dスクリプトをそのままにしてhttpd.confを編集することを選択しました)、ps -efに示されているPIDを使用してhttpdを強制終了し、/ etc/init.d/httpd startでhttpdを再度開始します。そうすべき。サービスhttpd status/stop/restart/startすべての動作が期待どおりになりました。
Http.confファイルはcentos5のバックアップから置き換えられたのではないかと思われますが、デフォルトが間違っていない限り、ある時点で編集された可能性は低いようですが。
/etc/httpd/conf/httpd.conf
Before:
PidFile run/httpd.pid
After:
PidFile run/httpd/httpd.pid
/etc/init.d/httpdは、それがどうあるべきかについてのヒントを与えました:
# pidfile: /var/run/httpd/httpd.pid
私のステータスでは、httpdがpsで実行されていることが明確に示されているにもかかわらず、停止が示されていました。 stopはエラーを出し、startは一部のポートですでに使用中のエラーを出しました。後から考えると、それは今では理にかなっていますが、誰かがそれに遭遇した場合にこれを投稿したかったのです。停止もhttpdを停止していましたが、サブシステムがロックされていることがあります。
私が得ていたエラーの例:
Stopping httpd: [FAILED]
Starting httpd: (98)Address already in use: make_sock: could not bind to address [::]:80
(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
HTTPプロセスを強制終了できるはずです。もちろん、現在の接続は中断され、誰かが現在データを送信している場合(たとえば、フォームを送信している場合)は失われる可能性があります。しかし、一般的には、そうです、これで問題ありません。同じことがservice httpd restart
でも起こります。/var/lock/subsys/httpdにあるロックファイルをクリーンアップする必要があります(そのファイルを削除します)。
次に、service httpd configtest
を実行して、Apache構成が少なくともロード可能であることを確認します。次に、service httpd start
で開始してみてください
使用中のポートに関するエラーは、httpdがまだ実行されているためであり、それらのポートを使用しているためです。同様に、ログエラーも。
もう1つ-Sudo
またはps
を使用するためにnetstat
を実行する必要はありません。 Sudo
を必要とするものにのみ使用する習慣をつけてください。意図しないときにroot特権で破壊的なコマンドを実行しないようにすると、後でトラブルを回避できます。