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
}
文字列配列パターン
WatchPathsとQueueDirectoriesはどちらもファイルパス文字列の配列です。これはlaunchd plistで最も一般的なパターンの1つです。JSON表現はシンプルで、JSON操作ツールとうまく連携します。
ThrottleInterval
ThrottleIntervalはジョブ起動間の最小秒数を指定する<integer>です。複数のファイル変更が短時間に発生した際の連続トリガーを防ぎます。JSONではプレーンな数値になります。
トリガーの組み合わせ
単一のlaunchdジョブはWatchPaths、QueueDirectories、StartCalendarInterval、StartIntervalを同時に使用できます。いずれかのトリガーが発火するとジョブが実行されます。JSON形式はすべてのトリガーを一目で確認しやすくします。
ユースケース
launchdジョブのファイル監視トリガーをドキュメント化するDevOpsエンジニア、またはmacOS固有のファイル処理パイプラインをクロスプラットフォームJSON設定に変換する移行スクリプトに役立ちます。