Posted at

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

More than 1 year has passed since last update.


突然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 を確認すると以下のログが出ていたので、どうやら起動に失敗しているらしいことを確認できた


/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 で起動しているらしいことがわかった


/usr/sbin/apachectlの一部

LAUNCHCTL="/bin/launchctl"

LAUNCHD_JOB="/System/Library/LaunchDaemons/org.apache.httpd.plist"

org.apache.httpd.plist の内容をみて、実際に実行されているコマンドを確認する


/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 スクリプトらしいことがわかった


/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 の環境まじでわかりにくい