自前ビルドしたApache Webサーバーをシステム起動時に自動起動させる

主題
この投稿で、自前ビルドしたApacheをシステム起動時に自動起動させるための手順を説明する。

背景
macOS Big Surになった事により、ビルトインのApacheは、無用の長物と化した。そこで、この投稿にも書いたとおり、Apacheを自前ビルドして運用することにした。しかし、そのApacheを、システム起動時に自動起動させる事ができていなかった。本稿では、その手順をトライアンドエラーを含めて説明する。

手順

  1. プロパティリストの作成
    自動起動はlaunchdの機能を用いる。次の内容のプロパティリストを、起動ディスク直下のライブラリ>LaunchDaemonsに作成する。
    なお、ファイル名は任意で構わないが、org.apache.httpdは使わないこと。(使うとビルトインのApacheが起動する)

    実行するコマンド
    yourNameは、ご自分の名前に置き換える。

                    cd /Library/LaunchDaemons
                    sudo nano jp.yourName.httpd.plist
                

    プロパティリストの内容
    yourNameは、ご自分の名前に置き換える。

                    <?xml version="1.0" encoding="UTF-8"?>
                    <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
                    <plist version="1.0">
                    <dict>
                        <key>Label</key>
                            <string>jp.yourName.httpd</string>
                        <key>ProgramArguments</key>
                        <array>
                            <string>/usr/local/apache2/bin/httpd</string>
                            <string>-D</string>
                            <string>FOREGROUND</string>
                        </array>
                        <key>RunAtLoad</key>
                        <true/>
                    </dict>
                    </plist>
                
  2. プロパティリストのパーミッションとグループの確認・設定
    これを行わない(または確認しない)と、次項でエラー(Path had bad ownership/permissions)が発生する。

    パーミッションとグループの確認
    パーミッションが0600、グループがroot:wheelであることを確認する。

                    ls -l jp.yourName.httpd.plist
                

    もし違う場合は、以下のように設定する。

                    sudo chmod 600 jp.yourName.httpd.plist
                    sudo chown root:wheel jp.yourName.httpd.plist
                
  3. Apacheの停止
    手動起動している場合、Apacheを一旦停止する。(停止しないと、次項でロード後、Webページ表示時に403 Forbiddenが発生する)

                    sudo apachectl stop
                
  4. プロパティリストのロード
    sudoを用いる。sudoなしでは、exit code 1(権限不足)になる。また、必ずロードしておくこと(ロードしておかないと、再起動時にロードされない)

                    sudo launchctl load -w jp.yourName.httpd.plist
                
  5. launchdの確認
    ラベルの左隣に0(正常)が出ていることを確認する。

                    sudo launchctl list jp.yourName.httpd
                
                    102	0	jp.yourName.httpd
                
  6. httpdプロセスの確認
    概ね次のように表示されていればオーケーである。

                    ps aux | grep httpd
                
                    daemon             625   0.0  0.0  4413944   1548   ??  S     9:16PM   0:00.00 /usr/local/apache2/bin/httpd -D FOREGROUND
                    daemon             293   0.0  0.0  4413944   1928   ??  S     9:16PM   0:00.00 /usr/local/apache2/bin/httpd -D FOREGROUND
                    daemon             292   0.0  0.0  4423888   6020   ??  S     9:16PM   0:00.01 /usr/local/apache2/bin/httpd -D FOREGROUND
                    daemon             291   0.0  0.0  4413944   1540   ??  S     9:16PM   0:00.00 /usr/local/apache2/bin/httpd -D FOREGROUND
                    yourName           891   0.0  0.0  4277664    732 s000  S+    9:19PM   0:00.00 grep httpd
                    root               102   0.0  0.1  4400312  10612   ??  Ss    9:16PM   0:00.06 /usr/local/apache2/bin/httpd -D FOREGROUND
                

参考サイト

以上。

この投稿へのコメント

コメントはありません。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

この投稿へのトラックバック

トラックバックはありません。

トラックバック URL