Launchd WatchPathsとQueueDirectoriesをJSONに変換する

WatchPathsとQueueDirectoriesを含むlaunchd plistファイルをJSONに変換します。ファイル監視トリガーが両形式でどのように表現されるかを学びます。

macOS Config

詳細な説明

Launchdのファイルシステムトリガー

LaunchdはWatchPaths(パスが変更されたときにトリガー)とQueueDirectories(ディレクトリが空でなくなったときにトリガー)を使用してファイルシステムの変更に基づいてジョブをトリガーできます。

Plist構造

<dict>
  <key>Label</key>
  <string>com.example.file-processor</string>
  <key>ProgramArguments</key>
  <array>
    <string>/usr/local/bin/process-files.sh</string>
  </array>
  <key>WatchPaths</key>
  <array>
    <string>/var/data/incoming</string>
    <string>/var/data/config.json</string>
  </array>
  <key>QueueDirectories</key>
  <array>
    <string>/var/spool/jobs</string>
  </array>
  <key>ThrottleInterval</key>
  <integer>10</integer>
</dict>

JSON出力

{
  "Label": "com.example.file-processor",
  "ProgramArguments": ["/usr/local/bin/process-files.sh"],
  "WatchPaths": ["/var/data/incoming", "/var/data/config.json"],
  "QueueDirectories": ["/var/spool/jobs"],
  "ThrottleInterval": 10
}

文字列配列パターン

WatchPathsQueueDirectoriesはどちらもファイルパス文字列の配列です。これはlaunchd plistで最も一般的なパターンの1つです。JSON表現はシンプルで、JSON操作ツールとうまく連携します。

ThrottleInterval

ThrottleIntervalはジョブ起動間の最小秒数を指定する<integer>です。複数のファイル変更が短時間に発生した際の連続トリガーを防ぎます。JSONではプレーンな数値になります。

トリガーの組み合わせ

単一のlaunchdジョブはWatchPathsQueueDirectoriesStartCalendarIntervalStartIntervalを同時に使用できます。いずれかのトリガーが発火するとジョブが実行されます。JSON形式はすべてのトリガーを一目で確認しやすくします。

ユースケース

launchdジョブのファイル監視トリガーをドキュメント化するDevOpsエンジニア、またはmacOS固有のファイル処理パイプラインをクロスプラットフォームJSON設定に変換する移行スクリプトに役立ちます。

試してみる — Plist ↔ JSON Converter

フルツールを開く