launchdデーモン管理
macOSのサービス管理システム。ログイン時の自動起動、クラッシュ時の自動再起動、バックグラウンドサービスの管理を担う。SysVinit(Linux)やsystemdに相当するmacOS固有の仕組み。
種別
| 種別 | 配置場所 | 権限 | 用途 |
|---|---|---|---|
| LaunchAgent | ~/Library/LaunchAgents/ |
ユーザー | ログインユーザーのサービス |
| LaunchDaemon | /Library/LaunchDaemons/ |
root | システム全体のサービス |
一般的なユーザーサービス(TTSデーモン、開発ツールの常駐プロセス等)はLaunchAgentとして配置する。
plistファイルの構造
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist ...>
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.example.myservice</string>
<key>ProgramArguments</key>
<array>
<string>/path/to/executable</string>
<string>--arg</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>KeepAlive</key>
<true/>
</dict>
</plist>
主要キー
| キー | 意味 |
|---|---|
Label |
サービスの一意識別子(逆ドメイン表記が慣例) |
ProgramArguments |
実行コマンドと引数 |
EnvironmentVariables |
環境変数の設定 |
RunAtLoad |
ロード時(ログイン時)に自動起動 |
KeepAlive |
クラッシュ時に自動再起動 |
StandardOutPath |
標準出力のログファイルパス |
管理コマンド
# 登録・起動
launchctl load ~/Library/LaunchAgents/com.example.service.plist
# 停止・登録解除
launchctl unload ~/Library/LaunchAgents/com.example.service.plist
# 状態確認
launchctl list | grep <サービス名>
# 強制再起動
launchctl kickstart -k gui/$(id -u)/<Label>
KeepAlive の効果
KeepAlive: true を設定すると、プロセスがクラッシュしても自動的に再起動する。これにより:
- Mac再起動後も自動復帰
- プロセスがクラッシュしても復帰
- 親プロセス(例:AIエージェントのGateway)が再起動してもdaemonは生き続ける
用途例
- TTSエンジンのデーモン(テキスト音声合成)
- 開発ツールのバックグラウンドサービス
- 定期実行タスク(
StartCalendarIntervalキーを使用)