WatchPathsまとめ
ぐぐっても古かったり不正確だったりするので.
WatchPathsは,launchdで使えるパラメータの一つです.
公式のリファレンスはこちらですが,見ても以下のような素気ない一文があるだけでよくわからないのが正直なところ.
https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man5/launchd.plist.5.html
WatchPaths
This optional key causes the job to be started if any one of the listed paths are modified.
というわけで,どれぐらい使えるのか確認します.
前提
uraura@rosemary$ sw_vers
ProductName: Mac OS X
ProductVersion: 10.11.1
BuildVersion: 15B42
El Capitanです.
準備
local.watchpaths-test.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>local.watchpaths-test</string>
<key>Program</key>
<string>/Users/uraura/work/ld/fired.sh</string>
<key>WatchPaths</key>
<array>
<string>~/work/ld/watching</string>
</array>
</dict>
</plist>
fired.sh
#!/bin/sh
LOGFILE=/tmp/fired.log
{
echo "$(date) fired!"
} >> "$LOGFILE" 2>&1
結果
やること | コマンド | 結果 |
---|---|---|
ディレクトリ生成 | mkdir watching |
fired1 |
パーミッション変更 | chmod 777 watching |
fired |
所有者変更 | sudo chown nobody:nobody watching |
fired |
ディレクトリの内容表示 | ls watching |
- |
ファイル作成 | touch watching/foo |
fired |
ファイルのパーミッション変更 | chmod 777 watching/foo |
fired |
ファイルの所有者変更 | sudo chown nobody:nobody watching/foo |
fired |
ファイルに書き込み | date > watching/foo |
fired |
ファイルの内容表示 | cat watching/foo |
- |
ファイルの削除 | rm watching/foo |
fired |
サブディレクトリ作成 | mkdir -p watching/sub1/sub2/sub3/sub4 |
fired |
サブディレクトリ内にファイル生成 | date > watching/sub1/sub2/sub3/sub4/bar |
fired |
サブディレクトリ内でパーミッション変更 | chmod 777 watching/sub1/sub2/sub3/sub4/bar |
fired |
サブディレクトリ内のファイル削除 | rm watching/sub1/sub2/sub3/sub4/bar |
fired |
サブディレクトリを一気に削除 | rm -rf watching/sub1/sub2 |
fired |
対象ディレクトリを削除 | rm -rf watching |
fired |
以上より,WatchPaths
に指定したディレクトリ以下はサブディレクトリを含め変更はすべて監視対象になるようです.
ls
やcat
で読みとるだけの操作では何も起こりませんでした.
サブディレクトリは監視対象にならない,というのをそこここで目にするのですが,昔の話??