自宅サーバーをClaude Codeで引っ越し その8:再起動しても自動で復旧させる
前回でWordPressが入り、サイトとしては一通り動くようになりました。ただ、このままでは困ることがあります。PCを再起動すると、サーバーが止まったままになってしまうのです。今回は、再起動しても自動で復旧するようにした話です。
再起動のたびに手作業
このサーバーは、Windows 11の上でWSL2(Ubuntu)を動かし、その中でnginxやPHP、データベースを動かしています。WSL2は、必要になったときに起動する仕組みなので、PCを再起動しただけでは自動的に立ち上がってくれません。
もう1つ厄介なのが、その2で紹介したポートの転送設定です。WSL2の内部のIPアドレスは、起動するたびに変わってしまいます。そのため、再起動のたびに新しいIPアドレスを調べて、転送設定をやり直す必要がありました。Windows Updateなどで再起動がかかるたびにこれをやるのは、流石に現実的ではありません。
自動化してもらう
そこでClaude Codeに、この一連の作業を自動化してもらいました。用意してもらったのは、次のことを順番に行うPowerShellのスクリプトです。
- WSL2(Ubuntu)を起動する
- 起動したWSL2の内部IPアドレスを調べる
- そのIPアドレスに向けて、ポートの転送設定をやり直す
これをWindowsのタスクスケジューラに登録して、PCの起動時に自動で走るようにします。これで解決…と思ったのですが、ここから2つほどつまずきました。
1. 「スタートアップ時」では失敗する
最初は、PCの電源を入れた時点で動くように「スタートアップ時」という設定にしました。ところが、タスクの実行結果を見ると失敗しています。
Claude Codeによると、ログインする前のタイミングでは、WSL2が使う仮想的なネットワークの準備が間に合わないことがあるそうです。そこで、実行のきっかけを「ログオン時」に変更したところ、正常に動くようになりました。
2. WSL2が勝手に止まってしまう
次は、もっと分かりにくい問題でした。スクリプトは正常に終わっているのに、しばらくするとサーバーが止まってしまいます。
原因は、WSL2が「誰も使っていない」と判断すると、自動的にシャットダウンしてしまうことでした。スクリプトの処理が終わった時点で接続がなくなるため、中で動いていたnginxなども巻き添えで止まってしまいます。
この自動停止を無効にする設定も試しましたが、この環境では効きませんでした。最終的にClaude Codeが出した答えは、スクリプトの最後に「何もせず待ち続けるだけ」のプロセスを常駐させておく、という方法です。
Start-Process -FilePath "wsl.exe" -ArgumentList "-d Ubuntu -- sleep infinity" -WindowStyle Hidden
誰かがWSL2を使い続けている状態を作ることで、自動停止を回避するという発想です。設定で正攻法が通らないときに、こういう回避策がすぐ出てくるのは助かりました。
文字コード問題
このとき、スクリプト内に日本語が含まれると文字化けしてエラーになってしまう場合がありました。
例えばブログの記事を処理するスクリプトで日本語のメッセージが含まれている場合です。
実行時のエラーに対してClaude Codeが文字コードの問題だと判断して、勝手に修正して解決までしています。
今のところ問題なし
ここまでの対策により、PCを再起動時には、OSにログインすればサーバーが自動的に復旧する状態になりました。
通常は起動したまま運用予定ですが、Windows Updateなどで再起動があっても、Webサービスの起動自体を特に意識する必要はなくなりました。
次回
次回は、LAN内の他のPCからだけアクセスできないという、原因の分かりにくかったトラブルの話です。

[…] 自宅サーバーをClaude Codeで引っ越し その8:再起動しても自動で復旧させる […]