Help us understand the problem. What is going on with this article?

launchdのWatchPathsによるファイル監視

More than 3 years have passed since last update.

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に指定したディレクトリ以下はサブディレクトリを含め変更はすべて監視対象になるようです.
lscatで読みとるだけの操作では何も起こりませんでした.

サブディレクトリは監視対象にならない,というのをそこここで目にするのですが,昔の話?? :sake:



  1. /var/log/system.logにこんなログが出て,だいたい10秒後に2回目が発火しました. 

    Nov 23 17:28:30 rosemary com.apple.xpc.launchd1: Service only ran for 0 seconds. Pushing respawn out by 10 seconds.

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away