突然Macのapacheが起動しなくなった

# 突然Mac の apache が起動しなくなった
Mac にデフォルトで入っている apache が突然起動しなくなったのでその原因と解決方法

## apache を start するが起動しない
いつものようにでapahceを起動
```
$ sudo apachectl start
```
プロセスとポートを確認するが、httpdが動いていないし 80番ポートもリスンされていない

```
$ ps aux | grep httpd
xxxx  1270   0.0  0.0  2434840    780 s000  R+    4:17PM   0:00.00 grep httpd
```

```
$ netstat -ant | grep LISTEN
tcp4       0      0  127.0.0.1.17603        *.*                    LISTEN     
tcp4       0      0  127.0.0.1.17600        *.*                    LISTEN     
tcp4       0      0  *.17500                *.*                    LISTEN     
tcp6       0      0  *.17500                *.*                    LISTEN     
tcp4       0      0  *.88                   *.*                    LISTEN     
tcp6       0      0  *.88                   *.*                    LISTEN     
tcp4       0      0  127.0.0.1.49153        *.*                    LISTEN     
tcp4       0      0  127.0.0.1.49152        *.*                    LISTEN     
tcp4       0      0  *.445                  *.*                    LISTEN     
tcp6       0      0  *.445                  *.*                    LISTEN     
tcp4       0      0  *.548                  *.*                    LISTEN 
```
## エラーを確認
/var/log/apache2/error_log を確認するが、該当の時刻のログが何も出ていない

/var/log/system.log を確認すると以下のログが出ていたので、どうやら起動に失敗しているらしいことを確認できた

```text:/var/log/system.logの一部
sudo[975]: xxxx : TTY=ttys001 ; PWD=/Users/xxxx ; USER=root ; COMMAND=/usr/sbin/apachectl start
com.apple.xpc.launchd[1] (org.apache.httpd): This service is defined to be constantly running and is inherently inefficient.
com.apple.xpc.launchd[1] (org.apache.httpd[978]): Service could not initialize: 15F34: xpcproxy + 12684 [1462][F7717708-ACF7-307D-B04E-998DFC36598F]: 0x2
```
## 原因を追っていく
/usr/sbin/apachectl の中をみると launchctl で起動しているらしいことがわかった

```text:/usr/sbin/apachectlの一部
LAUNCHCTL="/bin/launchctl"
LAUNCHD_JOB="/System/Library/LaunchDaemons/org.apache.httpd.plist"
```
org.apache.httpd.plist の内容をみて、実際に実行されているコマンドを確認する

```text:/System/Library/LaunchDaemons/org.apache.httpd.plistの一部
        <key>ProgramArguments</key>
        <array>
                <string>/usr/sbin/httpd-wrapper</string>
                <string>-D</string>
                <string>FOREGROUND</string>
        </array>
```
コマンドを直接実行してみる

```
$ /usr/sbin/httpd-wrapper -D FOREGROUND
```
すると以下のエラーがでた

```
-bash: /usr/sbin/httpd-wrapper: /usr/bin/ruby: bad interpreter: No such file or directory
```
なぜ rudy が関係しているのかわからないが、何らかのファイルが見つからずに起動に失敗しているだろうと予想する

/usr/sbin/httpd-wrapper の中を見ると、どうやらこれは ruby スクリプトらしいことがわかった

```text:/usr/sbin/httpd-wrapperの先頭行
#!/usr/bin/ruby
```
念のため /usr/bin/ruby を確認してみるとなんとファイルがない

```
$ ls -l /usr/bin/ruby
ls: /usr/bin/ruby: No such file or directory
```
## エラーの原因
ruby スクリプトを起動する際に /usr/bin/ruby が指定されいているが実行ファイルがないため起動に失敗しているようだった

そういえば最近 mac のデフォルトで入っている ruby を消して、homebrew で入れ直していたことを思い出す
その際に ruby コマンドのパスは /usr/local/bin/ruby に場所が変わっていた

```
$ which ruby
/usr/local/bin/ruby
```
/usr/bin/ruby をシンボリックリンクにして ruby へのパスが通るように修正

```
$ sudo ln -s /usr/bin/ruby /usr/local/bin/ruby
```
すると apache が正常に起動するように戻った

## 教訓
ruby、python などは OS のスクリプトで利用されていることが多いので、デフォルトのものはなるべく変更しない

開発をする際には rubyenv などの仮想環境を使うのがいい

ていうか mac の環境まじでわかりにくい