# [メタ情報]
# 識別子: LaunchAgentのplistの解説_exe
# システム名: 未分類
# 技術種別: Misc
# 機能名: Misc
# 使用言語: []
# 状態: 実行用
# [/メタ情報]
LaunchAgent の plist 基本解説
================================
1. plist とは何をするファイルか
================================
・plist は「Property List」の略で、macOS が設定情報を読むためのファイル形式です。
・中身は XML という書式で書かれています。
・LaunchAgent の plist は、
→ どのスクリプトを
→ いつ(どのタイミングで)
→ どのユーザー権限で
動かすかを macOS に伝える「ジョブ定義書」のような役割を持ちます。
================================
2. LaunchAgent と plist の置き場所
================================
■ ユーザーごとの自動実行(LaunchAgent)
・保存場所:
~/Library/LaunchAgents/
(ホームフォルダの中の Library/LaunchAgents)
・ここに置いた plist は、
そのユーザーがログインしているときだけ有効です。
・バックアップ用の rsync スクリプトなど、
普段ログインして使っているユーザーで動かしたい処理は、
LaunchAgent を使う形で十分です。
■ システム全体用(LaunchDaemon)
・場所は /Library/LaunchDaemons/ ですが、
管理が少し難しくなるため、ここでは扱いません。
・通常のバックアップ用途なら、ユーザーごとの LaunchAgent で問題ありません。
================================
3. plist の基本構造(最低限おさえたい形)
================================
LaunchAgent 用 plist の最小構成は、概ね次のようになります。
・ファイルの雰囲気(イメージ):
Label
com.example.jobname
ProgramArguments
/bin/bash
/Users/ユーザー名/scripts/test.sh
StartCalendarInterval
Hour2
Minute30
ここで特に重要なのは次の 3 つです。
(1) Label … ジョブの識別名
(2) ProgramArguments … 実行するコマンド(スクリプト)とその引数
(3) StartCalendarInterval … いつ実行するか(時間の指定)
================================
4. 各要素の詳しい説明
================================
-----------------------------
4-1. Label(ラベル)
-----------------------------
・この LaunchAgent ジョブの「名前」です。
・launchctl コマンドで状態を確認するときに、この名前が表示されます。
・一般的には「ドメイン名を逆にしたもの+用途名」のような形式にします。
例:
com.xxxxxxm1.tanada_T0_to_T1
com.xxxxxxm1.sync_scripts_pub
自分が見て意味が分かればよいので、厳密な決まりはありません。
-----------------------------
4-2. ProgramArguments(実行コマンド)
-----------------------------
・実行したいプログラムと引数を「配列(array)」の形で並べます。
・1つの が 1 引数分です。
・シェルの一行コマンドをそのまま書くのではなく、分割して書くイメージです。
例:bash のスクリプトを実行する場合
ProgramArguments
/bin/bash
/Users/xxxxxxm1/scripts/tanada/sync_T0_to_T1_main.sh
ポイント:
・パスは「絶対パス」で書きます。
・PATH 環境変数はあまり信用できないので、
スクリプト側でも /opt/homebrew/bin/rsync のように絶対パスを指定すると安心です。
-----------------------------
4-3. StartCalendarInterval(時間指定)
-----------------------------
・「何時に動かすか」を指定する場所です。
・dict(連想配列)の中に Hour / Minute などを書きます。
■ 毎日 2:30 に実行する例:
StartCalendarInterval
Hour2
Minute30
・Hour は 0〜23(24時間形式)
・Minute は 0〜59
■ もう少し複雑な指定も可能です:
・Weekday(曜日) … 1=日曜, 2=月曜, …, 7=土曜
・Day(その月の何日) … 1〜31
・Month(何月) … 1〜12
複数パターンで起動したい場合は、dict を配列にして複数書くこともできますが、
通常の毎日バックアップなら「Hour + Minute」の 1セットで十分です。
================================
5. よく使う追加オプション
================================
-----------------------------
5-1. RunAtLoad
-----------------------------
・Mac にログインしたタイミングでも実行したい場合に使います。
RunAtLoad
・例:
・通常は毎日 2:30 に起動
・さらに、Mac を再起動/ログインしたときにも一度動かしたい
といったケース。
-----------------------------
5-2. StandardOutPath / StandardErrorPath
-----------------------------
・スクリプトの実行結果(標準出力、標準エラー)をファイルに保存するための設定です。
・トラブルが起きた時に原因を追えるように、できるだけ設定しておくことをおすすめします。
例:
StandardOutPath
/Users/xxxxxxm1/scripts/logs_tanada/job.out
StandardErrorPath
/Users/xxxxxxm1/scripts/logs_tanada/job.err
・あらかじめ logs 用フォルダを作成しておきます:
mkdir -p ~/scripts/logs_tanada
-----------------------------
5-3. StartInterval(秒ごとの実行)
-----------------------------
・「◯秒ごとに実行したい」ときに使います。
例:1時間ごと(3600秒ごと)に実行する場合:
StartInterval
3600
・StartCalendarInterval(時刻指定)とは併用しない方が分かりやすいです。
(どちらか一方だけにするのが一般的)
================================
6. plist の保存・有効化・確認
================================
-----------------------------
6-1. 保存場所
-----------------------------
・ユーザーごとの LaunchAgent の場合:
~/Library/LaunchAgents/(ここに xxx.plist を保存)
例:
/Users/xxxxxxm1/Library/LaunchAgents/com.xxxxxxxxm1.tanada_T0_to_T1.plist
-----------------------------
6-2. 有効化(ロード)
-----------------------------
・ターミナルで次のように実行します:
launchctl load ~/Library/LaunchAgents/com.xxxxxxm1.tanada_T0_to_T1.plist
・正常なら特に何も表示されません。
-----------------------------
6-3. 無効化(アンロード)
-----------------------------
launchctl unload ~/Library/LaunchAgents/com.xxxxxxm1.tanada_T0_to_T1.plist
-----------------------------
6-4. 動作確認
-----------------------------
launchctl list | grep tanada
・ここで、Label に指定した名前が表示されていれば、
ジョブとして登録されています。
================================
7. よくあるトラブルと確認ポイント
================================
(1) パスの間違い
・ProgramArguments で指定したスクリプトのパスが誤っていると実行されません。
・絶対パス(/Users/…から始まる形)で書かれているか確認します。
(2) スクリプトに実行権限がない
・シェルスクリプトを作成したら、次のコマンドで実行権限を付けます:
chmod +x /Users/xxxxxxm1/scripts/tanada/sync_T0_to_T1_main.sh
(3) plist の XML が壊れている
・タグの閉じ忘れなどがあると、launchctl load がうまくいきません。
・次のコマンドで文法チェックができます:
plutil ~/Library/LaunchAgents/com.xxxxxxm1.tanada_T0_to_T1.plist
(4) ログを見て原因を探す
・StandardOutPath / StandardErrorPath に指定したファイルを開き、
エラー内容を確認します。
================================
8. まとめ(考え方の整理)
================================
・LaunchAgent の plist は、
「いつ・何を動かすか」を macOS に伝えるスケジュール表
のようなものです。
・一方で、実際の処理内容(どのフォルダを rsync するか、ログをどう書くか等)は、
→ シェルスクリプト側(例:sync_T0_to_T1_main.sh)
に詳しく書きます。
・役割分担をまとめると:
● plist(LaunchAgent)
- Label(ジョブ名)
- ProgramArguments(どのスクリプトを動かすか)
- StartCalendarInterval / StartInterval(いつ動かすか)
- ログの保存先(StandardOutPath / StandardErrorPath)
● シェルスクリプト
- rsync のオプション
- コピー元・コピー先のパス
- エラー処理や、必要ならメール通知など