440 文字
2 分
lsyncd 2.1で特定のファイルのみを同期させる
lsyncdで特定のファイルだけを同期したかったのですが、lsyncdはバージョン2.1未満と2.1以上で使い方が違ってはまったのでその対応メモです。
lsyncdの導入方法はこちら。
Ubuntuにlsyncdを導入する
バージョン2.1ではrsyncOpsが廃止された
lsyncd 2.0系では、rsyncOpsオプションの—exclude-fromを上手く使うことで、ディレクトリ単位ではなく、特定のファイルのみを同期させることができました。
しかし、このrsyncOpsオプションはlsyncd 2.1で廃止され、代わりにrsyncオプションに名前を変えました。
そのため、従来のrsyncOpsを設定するとlsyncdを起動できず、systemctlのstatusを確認すると以下のようなエラーが表示されます。
$ sudo systemctl status lsyncd... 3月 09 03:44:11 Virtual-Machine systemd[1]: Starting LSB: lsyncd daemon init script... 3月 09 03:44:11 Virtual-Machine lsyncd[12476]: * Starting synchronization daemon lsyncd 3月 09 03:44:11 Virtual-Machine lsyncd[12476]: Error: error preparing /etc/lsyncd/lsyncd.conf.lua: Parameter "rsyncOps" unknown. (if this is not a typo add it to checkgauge) 3月 09 03:44:11 Virtual-Machine lsyncd[12476]: ...fail!参考:
バージョン2.1では代わりに_extraオプションを使う
lsyncd 2.1系ではrsyncオプション内の_extraオプションを使って特定のファイルのみを同期させることができます。
この_extraオプション内に--includeと--excludeを指定してやることで、同期対象のファイル、同期対象外のファイルを設定することができます。
ですので、以下のように書くとhoge.txtのみが同期され、その他のファイルは同期されなくなり、特定のファイルのみの同期を実現できます。
$ cat /etc/lsyncd/lsyncd.conf.luasettings { logfile = "/tmp/lsyncd.log", statusFile = "/tmp/lsyncd.status"}sync { default.rsync, source = "/home/user/lsyncd_test/src/", target = "/home/user/lsyncd_test/dst/", rsync = { _extra = { "--include=hoge.txt", "--exclude=*" } }}参考: