![rsync:系统重启时未创建锁文件](https://linux22.com/image/682291/rsync%EF%BC%9A%E7%B3%BB%E7%BB%9F%E9%87%8D%E5%90%AF%E6%97%B6%E6%9C%AA%E5%88%9B%E5%BB%BA%E9%94%81%E6%96%87%E4%BB%B6.png)
系统重启后,rsync 启动,但没有锁定文件因此当远程机器上的 rsync 尝试获取目录进行备份时,它会失败,并显示
@ERROR: failed to open lock file
rsync error: error starting client-server protocol (code 5) at main.c(1534) [Receiver=3.0.9]
手动重新启动时,锁定文件已成功创建,并且问题消失,直到下次重新启动服务器/源。
Rsyncd 从 /etc/rc.local 启动:
/usr/bin/rsync --daemon --config /etc/rsyncd/rsyncd.conf
日志中没有什么特别有趣的东西。这是 /var/log/rsyncd.log:
2016/04/28 06:23:34 [26273] connect from <remote client> (<remote ip>)
2016/04/28 06:23:34 [26273] rsync: failed to open lock file /var/lock/rsyncd: Permission denied (13)
rsyncd 配置如下:
# cat /etc/rsyncd/rsyncd.conf
log file=/var/log/rsyncd.log
use chroot = yes
max connections=3
lock file = /var/lock/rsyncd
list = yes
uid = root
gid = root
secrets file = /etc/rsyncd.secrets
strict modes = yes
ignore errors = no
ignore nonreadable = yes
transfer logging = no
timeout = 600
refuse options = checksum dry-run
dont compress = *.gz *.tgz *.zip *.z *.rpm *.deb *.iso *.bz2 *.tbz
[backup dir config]
服务器主机上的系统是 CentOS(不确定版本,因为它显示的是 RedHat 版本号):
# cat /etc/centos-release
Red Hat Enterprise Linux AS release 4 (Nahant Update 5)
# uname -a
Linux <hostname> 2.6.32-504.el6.x86_64 #1 SMP Wed Oct 15 04:27:16 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
rsync 是:
# yum info rsync
Installed Packages
Name : rsync
Arch : x86_64
Version : 3.0.6
Release : 12.el6
造成这种行为的原因是什么?
UPD:尝试使用 xinetd 和 init 脚本启动 rsyncd,两种情况下的行为与前面描述的相同。使用 xinetd 启动时,锁创建在任何情况下都会失败,权限被拒绝;在启动时启动 init 脚本时也是如此 - 手动执行“service rsync restart”可以解决问题。
答案1
在 CentOS 论坛上寻求帮助并解决了问题。这是 SELinux 权限问题,rsync 可执行文件的上下文错误或诸如此类的问题。我做了几件事,其中最有效的是更新策略包。
按照我尝试的顺序:
为锁定文件创建一个单独的目录,恢复其默认值并修复配置以使用新路径
# mkdir /var/lock/rsync
# chmod 755 /var/lock/rsync
# restorecon -r /var/lock/rsync
# vim /etc/rsyncd/rsyncd.conf
lock file = /var/lock/rsync/rsyncd
更新包:
# yum update selinux-policy selinux-policy-targeted
有一些信息人rsync_selinux来自selinux-策略-doc包裹。
还有一个建议我没有尝试,因为问题已经解决了:
# getsebool rsync_server
rsync_server --> off
# setsebool -P rsync_server on