LoginSignup
14
16

More than 5 years have passed since last update.

OSXのLaunchAgentでホストOSのファイル監視してリモートサーバーにrsyncして同期する方法

Posted at

最初はnodejsのwatch使ってやろうと思ったが、調べてる内にmacで完結できることはmacでやろうと思ってtryしてみた。

例えばvirtualboxとかでプロジェクトのgitカレントを共有フォルダ設定していて更にリモートサーバーに飛ばしたい場合等に使う予定(まだ試していないが。。。。)

参考にしたサイト

LaunchAgentのplistを作る

習慣らしくてplistとタグ名は一致させるらしい(タグは.plistを除いた形)

  • usernameと記載されているものは自分のuser名に変更してください

~/Library/LaunchAgents/me.username.rsync.plist

~/Library/LaunchAgents/me.username.rsync.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>
        <!-- Label plistと同一の名前 -->                                                                                                                                                                    
        <string>me.username.rsync</string>
        <key>ProgramArguments</key>
        <array>
            <string>rsync</string>
            <string>-av</string>
            <string>--delete</string>
            <string>-e</string>
            <string>ssh</string>
             <!-- ホストのrsync対象元  -->
            <string>/Users/username/sample/</string>
             <!-- リモートのrsync対象先(dest)  -->
            <string>vagrant@192.168.56.103:/home/vagrant/sample</string>
        </array>
        <key>WatchPaths</key>
        <array>
            <!-- usernameは自分のユーザー名に変更する -->
            <string>/Users/username/sample/</string>
        </array>
         <!-- ログの出力先設定デフォルトは/var/log/system.logに書かれるらしい。最初は書いておいて動作上問題がなければ/dev/nullにしてもよいと思う(そうしないとログで容量が圧迫される  -->
        <key>StandardOutPath</key>
        <string>/tmp/me.username.monitor.out.log</string>
        <key>StandardErrorPath</key>
        <string>/tmp/me.username.monitor.err.log</string>
    </dict>
</plist>

ホストのrync元のディレクトリを作る

launchAgentのWatchPathは最初にsync元のディレクトリ作っとおかないと動かないのでloadする前に作る

~/ホストOS(OSX)
mkdir /Users/username/sample/

リモートのrync先のディレクトリを作る

rsyncがこけるのでこれも同様に

~/リモートサーバー
mkdir /home/vagrant/sample

LaunchAgentに作ったplistをloadさせる

launchctl load ~/Library/LaunchAgents/me.username.rsync.plist

ホストOS側で試しにファイル作って見る

/Users/username/sample/sample.txt
echo 'test' > /Users/username/sample/sample.txt

リモートに反映されているか確認する

~/リモートサーバー
ll /home/vagrant/sample

# sample.txtが作られていれば問題なし!!!

【補足】plistの更新について

launchAgentはplistを更新しても一回unloadしてloadをし直さないとplistの更新分は読み込み直さないので注意

launchctl unload ~/Library/LaunchAgents/me.username.rsync.plist

最後に

これでローカルでファイルゴリゴリ触れる〜

14
16
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
16