我有 CentOS 7 (3.10.0-1062.18.1.el7.x86_64),启用了 SELinux。安装了 PostgreSQL 12(不确定是否相关)。
我尝试备份数据库并将备份文件移动到另一个磁盘。我如何创建备份文件与此无关,所以我将跳到最后一步。我有备份文件/var/lib/pgsql/12/backups
并想将它们复制到/mnt/disk2
(目标路径无关紧要,尝试了各种方法)。
我使用以下命令进行有效复制。
rsync -v --recursive --copy-links --copy-dirlinks --ignore-existing --delete-delay /var/lib/pgsql/12/backups/ /mnt/disk2/
当我从 root 帐户下的交互式 SSH 会话运行它时,它运行正常,文件按预期传输。
显然,我已经创建了 systemd 计时器和服务来定期运行备份脚本。非常简单的服务。
[Unit]
Description=Backup PostgreSQL Databases
[Service]
ExecStart=/opt/postgres-backup.sh
同样,如果我从 SSH 会话执行“/opt/postgres-backup.sh”,则所有内容都是文件。
但是当脚本从 systemd 计时器运行,并且在 root 帐户下(我通过执行 whoami 来验证)时,rsync 命令失败并且我收到错误消息
sending incremental file list
rsync: change_dir "/var/lib/pgsql/12/backups" failed: Permission denied (13)
rsync: ERROR: cannot stat destination "/mnt/disk2/": Permission denied (13)
rsync error: errors selecting input/output files, dirs (code 3) at main.c(635) [Receiver=3.1.2]
出奇
cp -R /var/lib/pgsql/12/backups/ /mnt/disk2/
在两种情况下都可以正常工作。
我已经尝试过chmod -R 777 /var/lib/pgsql/12/backups/
了restorecon -R /var/lib/pgsql/12/backups/
还可以检查什么?rsync 失败的可能原因是什么?