brew services での Input/output error の解決方法
Homebrew を使用して MongoDB やその他のサービスを起動しようとした際に、「Bootstrap failed: 5: Input/output error」というエラーに遭遇することがあります。この記事では、この問題の原因と効果的な解決方法を解説します。
問題の概要
brew services start
コマンドを実行した際に以下のようなエラーが発生します:
Bootstrap failed: 5: Input/output error
Error: Failure while executing; `/bin/launchctl bootstrap gui/501 /Users/<user>/Library/LaunchAgents/homebrew.mxcl.mongodb-community.plist` exited with 5.
同様に launchctl load
コマンドでも「Load failed: 5: Input/output error」が発生します。
主要な原因と解決策
1. 権限問題の解決
最も一般的な原因は、データディレクトリやログファイルへのアクセス権限の問題です。
# データディレクトリとログディレクトリの権限を確認・修正
sudo chown -R $(whoami) /opt/homebrew/var/mongodb
sudo chown -R $(whoami) /opt/homebrew/var/log
TIP
MongoDB 以外のサービス(PostgreSQL、MySQL、Redisなど)でも同様の権限問題が発生する可能性があります。該当するパスを適宜変更してください。
2. サービス再起動の試行
サービスが既に起動している、または異常終了した状態で再度起動しようとするとこのエラーが発生することがあります。
# サービスの停止と再起動
brew services stop mongodb-community
brew services start mongodb-community
# または直接再起動
brew services restart mongodb-community
3. ログファイルの確認
エラーの根本原因を特定するために、サービスのログファイルを確認しましょう。
# MongoDB の場合
tail -n 50 /opt/homebrew/var/log/mongodb/mongo.log
# PostgreSQL の場合
tail -n 100 /usr/local/var/log/postgresql@11.log
# 一般的な Homebrew サービスの場合
tail -n 50 /opt/homebrew/var/log/[service-name].log
4. 完全な再インストール手順
上記の方法で解決しない場合、以下の完全な再インストール手順を試してください。
# サービスを完全にクリーンアップ
brew services cleanup
brew services stop mongodb-community
# 古い launch agent をアンロード
launchctl bootout gui/$(id -u) ~/Library/LaunchAgents/homebrew.mxcl.mongodb-community.plist
# plist ファイルを削除
rm -f ~/Library/LaunchAgents/homebrew.mxcl.mongodb-community.plist
# MongoDB の再インストール
brew uninstall mongodb-community
brew install mongodb-community
# ディレクトリの権限設定
mkdir -p /opt/homebrew/var/mongodb
mkdir -p /opt/homebrew/var/log
sudo chown -R $(whoami) /opt/homebrew/var/mongodb /opt/homebrew/var/log
# サービスの再起動
brew services start mongodb-community
# 互換性の問題がある場合の対処
brew services stop postgresql
rm /usr/local/var/postgresql@11/postmaster.pid # 存在する場合
brew services start postgresql
5. システム全体の権限問題
Homebrew 自体の権限に問題がある場合:
# Homebrew ディレクトリの所有権を修正
sudo chown -R $(whoami) $(brew --prefix)/*
6. 残留ファイルの削除
過去の実行によって残留したファイルが問題を引き起こしている場合:
# MongoDB のソケットファイルを削除
sudo rm -f /tmp/mongodb-27017.sock
# その他サービス固有の残留ファイルを確認
その他の考慮事項
バージョン互換性の問題
データベースサービスのバージョンアップ後、古いデータファイルが新しいバージョンと互換性がない場合があります。
WARNING
PostgreSQL などでは、メジャーバージョンアップ時にデータベースの移行が必要な場合があります。必ずバックアップを取得してからアップグレードしてください。
ポート競合の確認
他のプロセスが同じポートを使用している場合、サービス起動に失敗することがあります。
# ポートの使用状況を確認(例: MongoDB のデフォルトポート 27017)
lsof -i :27017
macOS の再起動
単純ですが、システムの再起動で解決することもあります。特に macOS のメジャーアップデート後は有効です。
トラブルシューティングのフロー
問題が発生した場合の系統的な対処手順:
- ログの確認:サービス固有のログファイルを確認
- 権限の確認:データディレクトリとログファイルの権限を確認
- サービスの再起動:
brew services restart
を試行 - 完全な再インストール:上記の完全再インストール手順を実行
- システム再起動:macOS の再起動を試行
予防策
- 定期的に
brew services cleanup
を実行して、不要なサービスをクリーンアップする - macOS のメジャーアップデート後は、Homebrew とすべてのサービスを更新する
- 重要なデータベースは定期的にバックアップを取得する
この記事で紹介した方法のほとんどは MongoDB 以外の Homebrew サービス(PostgreSQL、MySQL、Redis、RabbitMQ など)にも適用できます。問題が解決しない場合は、各サービスの固有のログを確認し、詳細なエラーメッセージに基づいて対処してください。