2025年9月29日月曜日

launchctl に登録した plist がいつ実行されるのか確認する方法

launchctl に登録した plist がいつ実行されるのか確認する方法

概要

直接 plist を見るしかないのでシェルスクリプトを使いましょう

環境

  • macOS 15.7

シェルスクリプト

#!/bin/bash

# launchctl list で "local.mac" を含むタスクのラベルを取得
labels=$(launchctl list | grep local.mac | awk '{print $3}')

echo "Label -> Schedule"

for label in $labels; do
    # plist の候補パス
    plist_path=""
    for dir in ~/Library/LaunchAgents /Library/LaunchAgents /Library/LaunchDaemons /System/Library/LaunchDaemons; do
        if [ -f "$dir/$label.plist" ]; then
            plist_path="$dir/$label.plist"
            break
        fi
    done

    if [ -z "$plist_path" ]; then
        echo "$label -> plist not found"
        continue
    fi

    # plist を JSON に変換して jq でパース
    json=$(plutil -convert json -o - "$plist_path" 2>/dev/null)
    if [ -z "$json" ]; then
        echo "$label -> failed to parse plist"
        continue
    fi

    echo "$label ->"

    # RunAtLoad
    run_at_load=$(echo "$json" | jq -r '.RunAtLoad // empty')
    if [ "$run_at_load" == "true" ]; then
        echo "  RunAtLoad: true"
    fi

    # StartInterval
    start_interval=$(echo "$json" | jq -r '.StartInterval // empty')
    if [ -n "$start_interval" ]; then
        echo "  StartInterval: every $start_interval seconds"
    fi

    # StartCalendarInterval (複数対応)
    intervals=$(echo "$json" | jq -c '.StartCalendarInterval // empty')
    if [ -n "$intervals" ]; then
        echo "  StartCalendarInterval:"
        echo "$intervals" | jq -r 'if type=="array" then .[] else . end | "    Hour: \(.Hour // "-"), Minute: \(.Minute // "0")"' 
    fi

    echo "-------------------------"
done

出力結果

Label -> Schedule
local.mac.1 ->
  StartCalendarInterval:
    Hour: 1, Minute: 0
    Hour: 4, Minute: 0
    Hour: 7, Minute: 0
    Hour: 10, Minute: 0
    Hour: 13, Minute: 0
    Hour: 16, Minute: 0
    Hour: 19, Minute: 0
    Hour: 22, Minute: 0
-------------------------
local.mac.2 ->
  StartCalendarInterval:
    Hour: 8, Minute: 0
-------------------------
local.mac.3 ->
  StartCalendarInterval:
    Hour: 8, Minute: 5
-------------------------
local.mac.4 ->
  StartCalendarInterval:
    Hour: 5, Minute: 30
    Hour: 11, Minute: 30
    Hour: 17, Minute: 30
    Hour: 23, Minute: 30
-------------------------
local.mac.5 ->
  StartCalendarInterval:
    Hour: 9, Minute: 0
    Hour: 12, Minute: 0
    Hour: 18, Minute: 0
    Hour: 21, Minute: 0
-------------------------
local.mac.6 ->
  StartCalendarInterval:
    Hour: 8, Minute: 5
-------------------------

最後に

もっと簡単に確認できる方法はないだろうか

0 件のコメント:

コメントを投稿