Lsyncdでmvに失敗する。

先日Lsyncdでsshアカウントとしてroot以外のアカウントを使用している場合に、mvに失敗する事象に遭遇しました。

その際の回避方法をメモしておきます。

事象が発生していた時のlsyncd.confがこちらです。

settings{
   logfile="/var/log/lsyncd/lsyncd.log",
   statusFile="/tmp/lsyncd.stat",
   statusInterval=1,
}

sync_base = {
   default.rsyncssh,
   delay=1,
   source="/var/www/html/",
   targetdir="/var/www/html/",
   excludeFrom="/etc/lsyncd_exclude.conf",
   rsync={
       owner=true,
       group=true,
       perms=true,
       rsh="/bin/ssh -l syncuser -i /root/.ssh/syncuser_id_rsa",
       rsync_path="sudo /bin/rsync"
   }
}

sync {sync_base,host="10.0.0.x"}
sync {sync_base,host="10.0.0.x"}

同期先のsudo設定がこちらです。

Defaults:syncuser !requiretty
syncuser     ALL=(ALL)       NOPASSWD: ALL

この状態で同期ディレクトリ内でmvを行うと下記のエラーが永遠と出て、同期に失敗します。

Normal: Retrying Move /var/www/html//mv_test.txt: 255    

また同期元で権限エラーが出力されます。

Permission denied (publickey,gssapi-keyex,gssapi-with-mic).    

手動でsshでログインを行い、mv操作は出来ます。なので権限の問題ではないはず。

色々試行錯誤した結果、lsyncd.confの修正で解決しました。

settings{
   logfile="/var/log/lsyncd/lsyncd.log",
   statusFile="/tmp/lsyncd.stat",
   statusInterval=1,
}

sync_base = {
   default.rsync,
   delay=1,
   source="/var/www/html/",
   excludeFrom="/etc/lsyncd_exclude.conf",
   rsync={
       owner=true,
       group=true,
       perms=true,
       rsh="/bin/ssh -i /root/.ssh/syncuser_id_rsa",
       rsync_path="sudo /bin/rsync"
   }
}

sync {sync_base,target="syncuser@10.0.0.x:/var/www/html/"}
sync {sync_base,target="syncuser@10.0.0.x:/var/www/html/"}    

lsyncdの実装を「default.rsyncssh」から「default.rsync」に変更することで解消しました。

実装を変更したことでhostオプションが使用出来なくなったため、targetの書き方も変わっています。

公式ページのやり取りを見ていると基本的にdefault.rsyncsshでなくdefault.rsyncを使った方がベターとの投稿が・・・

同様の事象が発生した際にご参考としていただければ幸いです。

いいなと思ったら応援しよう!