tech::hexagram

personal note for technical issue.

Mac OSXで特定のディレクトリ配下の内容の変更を監視してコマンド実行する

launchctlを使うとお手軽に出来るみたいなのでメモ。

  <?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>hoge.huga</string>
          <key>ProgramArguments</key>
          <array>
              <string>/bin/bash</string>
             <string>any command</string>
         </array>
         <key>WatchPaths</key>
         <array>
             <string>any paths</string>
         </array>
         <key>StandardOutputPath</key>
         <string>any output path</string>
         <key>StandardErrorPath</key>
         <string>any error path</string>
     </dict>
 </plist>
  • ProgramArguments : 実行したいコマンドを記述する。array内で、スペース区切りのコマンドをstringで記述する
  • WatchPaths : 変更を監視したいディレクトリやファイルを記述する。
  • StandardOutputPath : 標準出力のログを吐くパスを指定
  • StandardErrorPath : エラーのログを吐くパスを指定

いろいろ調べててincronだったりfseventだったり出てきたけど、上手く動かなかったのとunloadの方法がよくわからなかったのでこれが一番お手軽かつ確実かと。