是否可以让 rsync 在远程系统上创建日志文件?

是否可以让 rsync 在远程系统上创建日志文件?

我用它rsync来连接并备份到我有 ssh 访问权限的远程计算机上的硬盘。rsync连接正确。有效的代码是

rsync -av --progress -e "ssh -p port_number -i key/file/path" \
  "path/on/local/computer/to/back/up" \
  ssh_username@ssh_ip_address:"'path/on/remote/computer/to/back/up/to'"

我想知道是否有办法rsync使用它的--log-file选项在远程系统上生成日志文件(我希望文件位于我要备份到的同一远程硬盘上)。每当我给它一个用于日志文件的远程路径(例如,使用--log-file="path/on/remote/computer"),它似乎都在寻找我本地系统上的路径。我甚至尝试过--log-file=ssh_username@ssh_ip_address:path/on/remote/system,但没有用。

这是可能的吗,还是我需要在本地系统上创建一个日志文件,然后将scp其复制到远程系统?

本地和远程系统均运行 Ubuntu 12.04。

答案1

我会对rsync另一台机器执行此操作,然后只需运行一个scp命令即可将本地生成的日志文件放到您希望保存的远程系统上。

rsyncing 文件 + 日志

% rsync -avz -e 'ssh' $HOME/sample.sh remotemach:~ \
                --log-file=$HOME/rsync.log ; scp $HOME/rsync.log remotemach:~

确认

% ls -l ~/rsync.log ~/sample.sh
-rwxrwxr-x 1 saml saml 10059 Oct 15 15:20 /home/saml/sample.sh
-rw-r--r-- 1 saml saml   192 Feb  2 14:57 /home/saml/rsync.log

% ssh remotemach "ls -l sample.sh rsync.log"
-rwxrwxr-x 1 saml saml 10059 Oct 15 15:20 sample.sh
-rw-r--r-- 1 saml saml   192 Feb  2 14:54 rsync.log

将日志连接到远端

如果您想要将结果连接到rsync远程文件,则可以使用复合命令(参见 bash 的手册页)。在这里我rsync用括号括起来,并ssh通过管道将其输出传输到,即:

(rsync ...) | ssh ...

第一个文件已复制

% (rsync -avz -e'ssh' $HOME/sample1.sh remotemach:~) \
                    | ssh remotemach "cat >> \$HOME/rsync.log"

确认第一份副本

% ssh remotemach "ls -l sample*.sh rsync.log"
-rw-r--r-- 1 saml saml   133 Feb  2 19:49 rsync.log
-rwxrwxr-x 1 saml saml 10059 Feb  2 19:25 sample1.sh

第二个文件已复制

% (rsync -avz -e'ssh' $HOME/sample2.sh remotemach:~) \
                    | ssh remotemach "cat >> \$HOME/rsync.log"

确认第二份副本

% ssh remotemach "ls -l sample*.sh rsync.log"
-rw-r--r-- 1 saml saml   266 Feb  2 20:03 rsync.log
-rwxrwxr-x 1 saml saml 10059 Feb  2 19:25 sample1.sh
-rwxrwxr-x 1 saml saml 10059 Feb  2 19:25 sample2.sh

笔记:特别注意 右侧的文件ssh。请注意$HOME路径在 前面有一个正斜杠 () $HOME。这是故意的。需要转义 ,$HOME以便本地主机的 bash shell 不会扩展它。

答案2

很抱歉删除了这篇 9 年前的帖子,但这是谷歌搜索“rsync log file remote”的第一个结果

我今天浏览了手册页,发现这个--remote-option标志似乎就是我们在这里寻找的。不确定这个选项在 2013 年是否存在,但在 2022 年这里确实存在!

显然,通过将其链接起来--remote-option--log-file您可以在远程机器上生成日志,即使对于非守护进程传输也是如此。

 -M, --remote-option=OPTION
              This  option  is  used  for  more advanced situations where you want certain effects to be limited to one side of the
              transfer only.  For instance, if you want to pass --log-file=FILE and --fake-super to the remote system,  specify  it
              like this:

              rsync -av -M --log-file=foo -M--fake-super src/ dest/

--log-file 部分也提到了这一点

--log-file=FILE
              This  option  causes rsync to log what it is doing to a file.  This is similar to the logging that a daemon does, but
              can be requested for the client side and/or the server side of a non-daemon transfer.  If specified as a  client  op‐
              tion,  transfer  logging will be enabled with a default format of "%i %n%L".  See the --log-file-format option if you
              wish to override this.

              Here’s a example command that requests the remote side to log what is happening:

                rsync -av --remote-option=--log-file=/tmp/rlog src/ dest/

              This is very useful if you need to debug why a connection is closing unexpectedly.

就我个人而言,我仍然遇到 rsync 抱怨日志文件不存在的问题。但我认为这种方法是正确的。

相关内容