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

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

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

手順

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

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

    cd /Library/LaunchDaemons
    sudo vim 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)が発生する。

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

    ls -l jp.yourName.httpd.plist

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

    sudo chmod 644 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