macOSのlaunchctlコマンド活用Tips
macOSでサービスを管理するためのlaunchctl
コマンドは、デーモンやエージェントの制御に欠かせないツールです。この記事では、よく使うlaunchctlコマンドとそのオプションについて解説します。
基本コマンド
サービスの登録と開始
# 基本的なロード
sudo launchctl load /Library/LaunchDaemons/com.example.service.plist
# 永続的に有効化してロード
sudo launchctl load -w /Library/LaunchDaemons/com.example.service.plist
-w
オプションは重要です。これによりサービスが恒久的に有効化され、システム再起動後も自動的に起動するようになります。
サービスの停止と登録解除
# 基本的なアンロード
sudo launchctl unload /Library/LaunchDaemons/com.example.service.plist
# 永続的に無効化してアンロード
sudo launchctl unload -w /Library/LaunchDaemons/com.example.service.plist
-w
付きでunloadすると、サービスが恒久的に無効化され、システム再起動時に自動起動しなくなります。
サービスのステータス確認
# 登録されているサービスの一覧表示
sudo launchctl list
# 特定のサービスの状態確認
sudo launchctl list | grep example
出力の見方:
- 最初の列はプロセスID(実行中の場合)または
-
(停止中の場合) - 2列目は終了コード(0は正常、それ以外はエラー)
- 3列目はサービス名
サービスの手動起動と停止
# 登録済みサービスの起動
sudo launchctl start com.example.service
# 登録済みサービスの停止
sudo launchctl stop com.example.service
詳細な情報取得
# サービスの詳細情報を表示
sudo launchctl print system/com.example.service
よくあるトラブルシューティング
サービスが起動しない場合
-
plistファイルの権限確認
sudo chmod 644 /Library/LaunchDaemons/com.example.service.plist sudo chown root:wheel /Library/LaunchDaemons/com.example.service.plist
-
ログの確認
# システムログの確認 sudo log show --predicate 'eventMessage contains "example"' --last 10m # 標準出力・標準エラー出力の設定 # plistファイルに以下を追加 <key>StandardOutPath</key> <string>/tmp/example.out</string> <key>StandardErrorPath</key> <string>/tmp/example.err</string>
-
デバッグモード有効化
# plistファイルに以下を追加 <key>Debug</key> <true/>
リスタートループ対策
一部のサービスではリスタートループ(起動→即終了→再起動の繰り返し)が発生することがあります。特にデーモン化するプロセスでは、以下の対策が有効です。
-
フォアグラウンドモードで実行
多くのデーモンプログラムには、フォアグラウンドで動作させるオプション(-f, --foreground など)があります。
LaunchDaemonと併用する場合は、このオプションを指定することでリスタートループを解消できることが多いです。 -
ThrottleInterval設定
# plistファイルに以下を追加(単位は秒) <key>ThrottleInterval</key> <integer>60</integer>
これにより、短時間での再起動を抑制できます。
ユーザー権限に関するTips
特定のユーザーでサービスを実行するには、plistファイルに以下の設定を追加します。
<key>UserName</key>
<string>username</string>
<key>GroupName</key>
<string>groupname</string>
これにより、rootユーザーではなく指定したユーザーとグループでプロセスが実行されます。
まとめ
macOSのlaunchctlコマンドは強力ですが、適切に使うには様々なオプションと設定を理解する必要があります。特に-w
オプションの使用や、フォアグラウンドモードでの実行などは、サービスの安定稼働に大きく貢献します。
サービス管理で問題が発生した場合は、適切なログ設定とデバッグオプションを活用することで、トラブルシューティングが容易になります。