50073
大学で現在の時刻を表す動的webページをCGI,Perl,PHP,SSIとJavaScriptそれぞれ一つずつ作りなさいという課題をやった後、apache再起動時に以下のエラーがでました。

```

    [root@user1 ~]:501#  /etc/init.d/apache start
    (98)Address already in use: AH00072: make_sock: could not bind to address 0.0.0.0:80
    no listening sockets available, shutting down
    AH00015: Unable to open logs
    
```

とりあえず/usr/sbin/lsof -i |grep httpdコマンドでプロセスを調べ、kill -9
****コマンドで一つずつ削除したところ、再起動できました。

```

    [root@user1 ~]:502# /usr/sbin/lsof -i |grep httpd
        httpd    1679   root    3u  IPv4  10333      0t0  TCP *:http (LISTEN)
        httpd    1685 apache    3u  IPv4  10333      0t0  TCP *:http (LISTEN)
        httpd    1686 apache    3u  IPv4  10333      0t0  TCP *:http (LISTEN)
        httpd    1688 apache    3u  IPv4  10333      0t0  TCP *:http (LISTEN)
        httpd    1689 apache    3u  IPv4  10333      0t0  TCP *:http (LISTEN)
        httpd    1690 apache    3u  IPv4  10333      0t0  TCP *:http (LISTEN)
        httpd    1691 apache    3u  IPv4  10333      0t0  TCP *:http (LISTEN)
        httpd    1692 apache    3u  IPv4  10333      0t0  TCP *:http (LISTEN)
        httpd    1693 apache    3u  IPv4  10333      0t0  TCP *:http (LISTEN)
    [root@user1 ~]:503# kill -9 1679
    [root@user1 ~]:504# kill -9 1685
    [root@user1 ~]:505# kill -9 1686
    [root@user1 ~]:506# kill -9 1688
    [root@user1 ~]:507# kill -9 1689
    [root@user1 ~]:508# kill -9 1690
    [root@user1 ~]:509# kill -9 1691
    [root@user1 ~]:510# kill -9 1692
    [root@user1 ~]:511# kill -9 1693
    [root@user1 ~]:512# /usr/sbin/lsof -i |grep httpd
    [root@user1 ~]:517# /etc/init.d/apache start
    [root@user1 ~]:518# 
    
```

しかしCentOSをrebootすると再び上記と同じ起動できない状況になってしまいます。(iptablesは停止をしたくらいで設定をいじった覚えはないです。)  
Linux経験が浅いのでこういったトラブルにはまだ自力で解決できません。原因が何なのか教示をお願いできないでしょうか。  
よろしくお願いたします。

以下にこのサイトで調べてやってみたこと、LAMP環境構築の流れ、大学の課題の動的webページのソースを載せておきます。

# やってみたこと

```

    [root@user1 ~]:518# grep Port /etc/ssh/sshd_config
    #Port 22
    #GatewayPorts no
    
    [root@user1 ~]:519# ps -ef |grep http
    root      2706     1  0 16:51 ?        00:00:00 /usr/local/apache/bin/httpd -k start
    www       2709  2706  0 16:51 ?        00:00:00 /usr/local/apache/bin/httpd -k start
    www       2710  2706  0 16:51 ?        00:00:00 /usr/local/apache/bin/httpd -k start
    www       2711  2706  0 16:51 ?        00:00:00 /usr/local/apache/bin/httpd -k start
    www       2712  2706  0 16:51 ?        00:00:00 /usr/local/apache/bin/httpd -k start
    www       2713  2706  0 16:51 ?        00:00:00 /usr/local/apache/bin/httpd -k start
    root      3033  2286  0 17:57 pts/0    00:00:00 grep http
    [root@user1 ~]:522# /usr/sbin/lsof -i |grep sshd
    sshd     1522     root    3u  IPv4  10141      0t0  TCP *:ssh (LISTEN)
    
```

# LAMP環境構築の流れ

大学の講義の流れでCentOSインストール、yum -y updateコマンド実行、開発環境構築後すぐにLAMP環境構築に入りました。  
1.OpenSSL(1.0.2o)をコンパイルでインストール  
2.Apache(2.4.33)のソースをapr,apr-
utilと一緒にダウンロード、コンパイルしてインストール(講義内の指定でドキュメントルートは/home/apache/htdocsにしています。)  
講義で使用するサイトに従って設定を行った後index.htmlを作ってfirefoxからページが見えるか確認したところ成功。  
3.MariaDB(10.2.14)インストール。(講義の教授の指定でMySQLではなくMariaDBにしています。)  
4.PHP5.6をコンパイルでインストール。インストール後、Apache連携確認、再起動成功。
phpinfo.phpを作ってfirefoxからphpのトップページが見えるか確認したところ、成功。(このタイミングでchkconfig httpd
onコマンドで自動起動を設定しました。)  
これでLAMP環境の構築は無事に終わりました。

# 動的webページのソース

以下/home/apache/htdocs/  
CGI(date.cgi

```

    #!/bin/sh
    
    echo "Content-type: text/html"
    echo 
    
    echo "<html>"
    echo "<head>"
    echo "<meta http-equiv=\"content-TYPE\" content=\"text/html; charset=UTF-8\">"
    echo "</head>"
    
    echo "<body>"
    echo "<h2>こんにちは Common Gateway Interface (CGI) by Shell Script</h2>"
    echo "<font size=+1 color=#c01010>"
    echo "現在の時刻は "
    /bin/date +"%y年%m月%d日(%a)  %H時%M分%S秒"
    echo "<br/></font>"
    echo "</body>"
    
    echo "</html>"
    
```

Perl(date.pl)

```

    #!/usr/bin/perl
    
    print "Content-type: text/html\n";
    print "\n";
    
    print "<html>\n";
    print "<head>\n";
    print "<meta http-equiv=\"content-TYPE\" content=\"text/html; charset=UTF-8\">\n";
    print "</head>\n";
    
    print "<body>\n";
    print "<h2>こんにちは Perl</h2>\n";
    print "<font size=+1 color=#c01010>\n";
    print "現在の時刻は \n";
    
    $time = localtime(time);
    print $time;
    
    print "<br/></font>\n";
    print "</body>\n";
    
    print "</html>\n";
    
```

PHP(date.php)

```

    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title> PHP Date </title>
    </head>
    
    <body>
    <h2>こんちは Hypertext Preprocessor (PHP)</h2>
    <font size=+1 color=#c01010>
    
    <?php
    date_default_timezone_set('Asia/Tokyo');
    print(date('現在の時刻は Y年m月d日 (D)  a h時i分s秒 です').'<br/>');
    ?>
    
    </font>
    </body>
    </html>
    
```

SSI(date_ssi.html date.sh .htaccess)

date_ssi.html

```

    <html>                                                                                                                                         
    <head>                                                                                                                                         
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title> SSI Date </title>
    </head>
    
    <body>
    <h2>こんにちは Server Side Include (SSI)</h2>
    <font size=+1 color=#c01010>
    現在の時刻は <!--#exec cmd='./date.sh' --> <br />
    </font>
    </body>
    
    </html>
    
```

date.sh

```

    #!/bin/sh
    /bin/date +"%y年%m月%d日(%a)  %H時%M分%S秒"``
    
```

.htaccess

```

    Options +Includes
    
```

Javascript(date_js.html)

```

    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title> JavaScript Date </title>
    </head>
    
    <body>
    <h2>こんにちは Java Script</h2>
    <font size=+1 color=#c01010>
    
    現在の時刻は 
    <script language="JavaScript">
    <!--
    function show_date(){
        var date = new Date();
        document.write(date);
    }
    show_date();
    //-->
    </script> 
    
    </font>
    </body>
    </html>
    
```

date.cgi,date.plには`chmod 755`コマンドを使いました。  
SSI以外は成功しました。

ちなみに講義の教授は多忙の為研究室にいないことが多く、頼るのは難しいです。
CC BY-SA 4.0
2018-11-07T09:35:30.583
50052
2018-11-08T07:27:59.113
2018-11-08T07:27:59.113
3060
30885
question
centos apache
ソースコードからインストールしたApacheが起動できない
エラー的には、80ポートが使用中ということなので、

```

    lsof -i:80
    
```

で使用しているプロセスを探してみたらどうでしょうか？  
80でListenしているのがhttpdだけとは限りません。

あとは、  
CentOSをインストールした時点でhttpdがパッケージインストールされていて、  
これが無効化かアンインストールされていないのにソース版をインストールしたために、  
httpdが2個入っているということも考えられますね。  
再起動したときにパッケージ版が自動起動してるとか？

```

    rpm -qa|grep httpd
    
```

とかで確認しみてください。
CC BY-SA 4.0
2018-11-07T09:52:26.160
50053
2018-11-07T10:01:31.313
2018-11-07T10:01:31.313
30881
30881
50052
answer
サービスの再起動はプロセスの強制終了ではなく"restart"を使用してください。

```

    $ /etc/init.d/apache restart
    
```

chkconfigで自動起動を有効にしているなら、改めてコマンドで起動する必要はないはずです。  
OS起動直後にhttpdの状態を確認してください。

```

    $ /etc/init.d/apache status
    
```

既に(自動で)正常起動しているにも関わらず、コマンドラインから二重に起動しようとしてエラーになっているように感じられます。
CC BY-SA 4.0
2018-11-07T10:07:03.423
50054
2018-11-07T10:07:03.423
3060
50052
answer
Centos には `httpd` という名前のパッケージがあるのですが、ソースからビルドした apache とバッティングしてるんだと思います。

同時に動かさなければ良いので、httpd の方を削除するか、chkconfig で自動起動を無効化してみてください。

## インストールされてるか確認

```

    # yum info httpd
    読み込んだプラグイン:fastestmirror, priorities, security
    Loading mirror speeds from cached hostfile
     * base: mirrors.cat.net
     * extras: mirrors.cat.net
     * updates: mirrors.cat.net
    base                                                                                         | 3.7 kB     00:00
    base/primary_db                                                                              | 4.7 MB     00:00
    extras                                                                                       | 3.4 kB     00:00
    extras/primary_db                                                                            |  26 kB     00:00
    updates                                                                                      | 3.4 kB     00:00
    updates/primary_db                                                                           | 1.9 MB     00:00
    109 packages excluded due to repository priority protections
    インストール済みパッケージ
    名前                : httpd
    アーキテクチャ      : x86_64
    バージョン          : 2.2.15
    リリース            : 60.el6.centos.6
    容量                : 3.0 M
    リポジトリー        : installed
    提供元リポジトリー  : updates
    要約                : Apache HTTP Server
    URL                 : http://httpd.apache.org/
    ライセンス          : ASL 2.0
    説明                : The Apache HTTP Server is a powerful, efficient, and extensible
                        : web server.
      :::
    
```

## httpd パッケージを削除

```

    yum -y remove httpd
    
```

## httpd パッケージの自動起動を無効化

```

    chkconfig httpd off
    
```
CC BY-SA 4.0
2018-11-08T02:12:59.393
50073
2018-11-08T02:12:59.393
5008
50052
answer
`/etc/init.d/apache start`で再起動をしたのですか？  
恐らく起動時に自動的なサービス開始も有効にしているのでは？  
あくまで`start`は開始なので、既にApacheが動いている状態で再度開始は出来ません。  
`restart`か、`graceful`を利用してください。  
もしくは明示的に一度`stop`してから`start`ですね。
CC BY-SA 4.0
2018-11-08T02:36:06.293
50075
2018-11-08T02:36:06.293
50052
answer