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を使った方がベターとの投稿が・・・
同様の事象が発生した際にご参考としていただければ幸いです。