メインコンテンツへスキップ
nefs — portfolio

【EvenG2】Macを再起動しても自動で動くのか?サーバー常駐化の話

Mac側のサーバーをlaunchdで常駐化し、再起動しても自動で動くようにした。手動での起動作業は不要になったが、良かれと思って手動で再起動しようとしたら、逆に壊してしまった。

今回は、常駐化の仕組みと、その落とし穴を振り返る。

この記事でわかること

  • 常駐化したことで手動起動が不要になった実情(2026年9月時点の記録)
  • 常駐化の仕組みと正しい停止・再起動の方法
  • 手動で再起動しようとして逆に壊した経緯
  • 専用コマンドで再起動すれば競合を避けられるという対応

常駐化したことで手動起動は不要になった

サーバーは、都度自分で起動しなくても勝手に立ち上がるようになった。 Mac再起動後の自動起動だけでなく、プロセスが落ちた場合の自動復帰も、常駐管理の仕組みに任せている。次の章から、その仕組みを振り返る。

手動起動が不要になった常駐化の全体像を示す図解

常駐化はこういう仕組みで動いている

常駐化の仕組みは、macOSのlaunchdという機能を使って組んである。launchdの設定ファイルに、Mac起動時に自動で立ち上げる指定と、プロセスが落ちたら自動で再起動する指定を入れてある。

サーバーの待受アドレスも、自宅ネットワーク内の他の端末からアクセスできるよう設定してある。動作状況は専用のログファイルに記録される。

正しい停止・再起動の方法

通常の停止・再起動は、launchdの常駐設定をいったん外してから読み込み直すコマンドで行う。プロセスを止めて、自動復帰の仕組みが働くのを待つだけでも再起動できる。

手動で再起動しようとして逆に壊した

ある日、いつもと違うやり方で再起動しようとした。

手動再起動が常駐管理と競合してクラッシュした経緯を示す図解

killと手動起動の組み合わせが自動再起動と競合した

2026年9月14日、サーバーのプロセスをkillコマンドで止め、続けて手動でNode.jsのプロセスを起動し直そうとした。ところが常駐管理の仕組みも、プロセスが落ちたことを検知し、同時に自動で再起動をはじめていた。

ポート使用中エラーでどちらかのプロセスがクラッシュした

手動で起動したプロセスと、常駐管理が自動で起動したプロセスが、同じポートを同時に使おうとして競合した。片方がポート使用中エラー(EADDRINUSE)でクラッシュする結果になった。

専用コマンドで再起動すれば解決した

再起動の正しい手順は、常駐管理側に用意された専用コマンドを使うことだった。 手動でのkillと起動を組み合わせるやり方をやめ、この専用コマンドに統一したところ、競合は起きなくなった。

便利な仕組みほど正しい操作方法も覚えておく必要がある

知らないまま使うと、便利さの分だけ痛い目にあう。 自動化の仕組み自体を疑わず、昔ながらの手動操作を持ち込んだことが、今回のクラッシュの直接の原因だった。

この教訓は、MOCO Worksのサービスの運用にも反映している。

参考・出典情報

(本記事は社内技術ドキュメントによる裏取り起点のため、外部出典なし)