launchd-manage スキル
dotfiles自動同期のlaunchdエージェント管理を行う。
概要
auto-syncは毎時dotfilesの変更をGitHubに自動同期するlaunchdエージェント。
- •plistファイル:
~/Library/LaunchAgents/com.user.dotfiles-sync.plist - •実行スクリプト:
/Users/snkrheadz/ghq/github.com/snkrheadz/laptop/scripts/auto-sync.sh - •ログファイル:
~/Library/Logs/dotfiles-sync.log - •実行間隔: 3600秒(1時間)
コマンド
エージェント状態確認
bash
launchctl list | grep dotfiles
plistファイル確認
bash
cat ~/Library/LaunchAgents/com.user.dotfiles-sync.plist
自動同期スクリプト確認
bash
cat /Users/snkrheadz/ghq/github.com/snkrheadz/laptop/scripts/auto-sync.sh
ログ確認
bash
cat ~/Library/Logs/dotfiles-sync.log | tail -50
最新のログエントリ
bash
tail -20 ~/Library/Logs/dotfiles-sync.log
エージェント停止
bash
launchctl unload ~/Library/LaunchAgents/com.user.dotfiles-sync.plist
エージェント起動
bash
launchctl load ~/Library/LaunchAgents/com.user.dotfiles-sync.plist
エージェント再起動
bash
launchctl unload ~/Library/LaunchAgents/com.user.dotfiles-sync.plist && \ launchctl load ~/Library/LaunchAgents/com.user.dotfiles-sync.plist
手動で同期実行
bash
/Users/snkrheadz/ghq/github.com/snkrheadz/laptop/scripts/auto-sync.sh
plistのシンタックスチェック
bash
plutil -lint ~/Library/LaunchAgents/com.user.dotfiles-sync.plist
plistファイル構造
xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "...">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.user.dotfiles-sync</string>
<key>ProgramArguments</key>
<array>
<string>/path/to/auto-sync.sh</string>
</array>
<key>StartInterval</key>
<integer>3600</integer>
<key>StandardOutPath</key>
<string>~/Library/Logs/dotfiles-sync.log</string>
<key>StandardErrorPath</key>
<string>~/Library/Logs/dotfiles-sync.log</string>
</dict>
</plist>
実行フロー
状態確認
- •launchdエージェントの稼働状態確認
- •plistファイルの存在確認
- •最新のログエントリを表示
トラブルシューティング
- •エージェント状態確認
- •ログを確認して最後の実行結果を調査
- •手動実行でスクリプトの動作確認
- •必要に応じてエージェント再起動
使用例
- •"auto-syncの状態を確認"
- •"自動同期のログを見せて"
- •"auto-syncを再起動"
- •"自動同期を一時停止"
- •"手動で同期を実行"
auto-sync.shの動作
- •dotfilesディレクトリに移動
- •
brew bundle dump --forceでBrewfile更新 - •
git add -Aで変更をステージ - •変更がある場合のみコミット
- •リモートにプッシュ
注意事項
- •エージェント停止中は自動同期されない
- •手動同期は
scripts/auto-sync.shで実行可能 - •ログが肥大化したら手動で削除可能
- •ネットワーク接続がない場合、プッシュは失敗する(次回実行時に再試行)