なぜかデカいWindowsのアプデのたびに自宅鯖として常時起動しているハズのApach24が、サービスの登録から外れてるので、OSの起動後自動でインストール&起動するようにbatファイルを作りました。
サービスのインストールには管理者権限が必要なため、batファイルは2つ用意しました。
- apachをインストール&起動するbatファイル
- 上記batファイルを管理者権限で実行するbatファイル
そして2つ目のbatファイルを起動時に実行すれば求めていた機能を実現できました。
わたしがやりたいこと
何故かWindowsの大型アップデートとともに、一度はhttpd -k install
して、「自動」でスタートアップするハズのApacheがサービス一覧からいなくなるのをどうにかするための方策を考えました。
ここで、サービス登録後、少なくとも再起動しないうちはApacheが問題なく動いていることがわかりました。
したがって、解決策は、WindowsにログインするたびにApacheをサービスとして登録&起動すればよいということになります。
起動のたびに以下のコマンドを実行すればOK。
- cd C:\apache\bin
- httpd -k install
- httpd -k start
ただし、サービスとして登録するには管理者権限でコマンドを実行する必要があるため、batファイルを2つ使って実現します。
コピペ可。2つのbatファイルと解説
1つ目のbat Apacheをサービスとして登録&起動
@echo off
rem Apacheをインストールするディレクトリに移動する
cd C:\apache\bin
rem Apacheをインストールする
httpd -k install
httpd -k install
rem Apacheを起動する
httpd -k start
何故かhttpd -k install
を実行する際、一度目はエラーが出て2度目は問題なくサービスへ登録できるので、2回書いてます。
上記コードを拡張子をbatにして保存し、管理者権限で実行するとApacheをサービスに登録して起動できます。
既にサービスとして登録されていてhttpd -k install
した場合、[Sun May 28 16:35:10.714379 2023] [mpm_winnt:error] [pid 17476:tid 364] AH00433: Apache2.4: Service is already installed.
と言われるだけなので特に支障はありません。
また、既にApacheが起動しているのにhttpd -k start
すると、(OS 10048)通常、各ソケット アドレスに対してプロトコル、ネットワーク アドレス、またはポートのどれか 1 つのみを使用できま す。 : AH00072: make_sock: could not bind to address [::]:80
(OS 10048)通常、各ソケット アドレスに対してプロトコル、ネットワーク アドレス、またはポートのどれか 1 つのみを使用できま す。 : AH00072: make_sock: could not bind to address 0.0.0.0:80
AH00451: no listening sockets available, shutting down
AH00015: Unable to open logs
と言われるだけで同じく問題ありません。
2つ目のbat 管理者権限でbatファイルを起動するbat
管理者権限でbatを起動するだけなら1つのファイルにまとめられそうですが、他にも複数管理者権限で起動したいものがあるので……
このコードを拡張子batで保存します。
powershell start-process C:\中略\apach_install_and_start.bat -Verb runas
黄色い部分は1つ目のbatファイルのパスに置き換えてください。
2つ目のbatファイルをWindowsへログイン時に実行するには
まず2つ目のbatファイルのショートカットを作成します。
そして、できたショートカットをC:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup
に配置します。
これだけで終了!!
Windowsにログインするたびに、「管理者権限で「Apacheをサービス登録&起動するbat」を起動するbat」を実行できます。
まとめ Apacheをサービスとして登録&起動するbatをログインのたびに実行するには
- 以下のコマンドを実行するbatファイルを作る
- cd C:\apache\bin
- httpd -k install
- httpd -k start
- 上記batファイルを管理者権限で実行するbatファイルを作る
- 2番目のbatファイルがログイン時に実行されるようにする
- 完成!!
こうしてOSアプデのたびにサービス一覧にApache24があるかを目視確認する生活から解放されたのでした。
めでたしめでたし
関連して、読み込み高速化設定についてもごらん下さい