我用它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 抱怨日志文件不存在的问题。但我认为这种方法是正确的。