Lsyncd

Lsyncd(Live Syncing Daemon)は、ローカルのディレクトリ構造をリモートターゲットに同期するツールです。このツールは、ファイルシステムのイベントインターフェース(inotifyやfseventsなど)を使用して、ローカルのファイルやディレクトリの変更を監視します。変更が検出されると、Lsyncdはこれらのイベントを数秒間集約し、その後、一つまたは複数のプロセスを生成して、リモートファイルシステムへの変更を同期します。デフォルトの同期方法はrsyncですが、rsync+sshを用いることで、ファイルやディレクトリの移動をより効率的に同期することができます。

Lsyncdは、変更が少ないと予想されるローカルディレクトリツリーをリモートミラーに同期するために設計されており、特に安全なエリアからそうでないエリアへのデータ同期に有用です。Lsyncdの設定は、コンフィグファイルを通じて細かくカスタマイズすることができ、カスケードレイヤーからシェルスクリプトやLua言語で書かれたコードまで、カスタムアクション設定を一から記述することも可能です。このように、Lsyncdはシンプルで強力かつ柔軟な設定が可能です。

なお、Lsyncd 2.2.1では、すべてのソースおよびターゲットマシンにrsyncバージョン3.1以上が必要です。また、GPLv2ライセンスの下で公開されています。

例えば、ローカルディレクトリ/homeremotehost.org::share/にrsyncを用いて同期するコマンドや、ssh接続を用いてリモートホスト上での移動をローカルで実行するコマンドなど、さまざまな使用例があります。

Lsyncdに関する詳細は、GitHubページや公式のGitHub Pagesサイトに記載されています​ (GitHub)​​ (Lsyncd Website)​。また、最新のリリース情報などもGitHubのリリースセクションで確認できます​ (GitHub)​。

settings {
   logfile    = "/var/log/lsyncd.log",
   statusFile = "/var/log/lsyncd.status",
   nodaemon   = false,
}

sync {
   default.rsyncssh,
   source    = "/path/to/local/dir",
   host      = "remotehost.org",
   targetdir = "/path/to/remote/dir",
   rsync     = {
     archive  = true,
     compress = true,
     whole_file = false,
     _extra   = {"-e", "ssh -p 2222"}, -- ここでSSHポートを指定
   }
}

settings {
   logfile    = "/var/log/lsyncd.log",
   statusFile = "/var/log/lsyncd.status",
   nodaemon   = false,
}

sync {
   default.rsyncssh,
   source    = "/path/to/local/dir",
   host      = "remotehost.org",
   targetdir = "/path/to/remote/dir",
   rsync     = {
     archive  = true,
     compress = true,
     whole_file = false
   },
   ssh = {
     identityFile = "/path/to/private/key",  -- 秘密鍵のパス
     options = {
       StrictHostKeyChecking = "no",
       UserKnownHostsFile = "/dev/null"
     }
   }
}