我正在使用 rsync 将远程服务器备份到另一台计算机。
在 cron.daily 中我有一个包含以下内容的文件:
rsync -avz -e ssh [email protected]:/ /mybackup/
它使用公钥/私钥对进行登录。这似乎在大多数情况下都运行良好,但是,我(愚蠢地)只通过查看一些重要文件(MySQL 转储)上的日期来真正检查它,我知道这些文件每天都在变化。显然,该文件之后可能会出现错误。
有时会失败。当我手动运行它时,有时会发生类似“客户端重置”的情况。
记录它的最佳方法是什么,以便我可以确定它是否已完成? cron 日志未显示任何错误。我还没有尝试过,但备份机器上较旧版本的 CentOS 上的 rsync 手册页没有显示 --log-file 选项。我想我可以用 > 重定向 stdout,但我真的不想知道每个文件。我只是想知道它是否全部有效。
谢谢
答案1
我认为你已经解决了自己的问题。如果将 stdout 和 stderr 都重定向到一个文件,则不会获得 rsync 传输的每个文件的输出——只有在详细(-v
)模式下运行时才会生成输出。的默认行为rsync
是仅在发生错误时生成输出。所以你可以这样做...
rsync ... > /var/log/rsync.log 2>&1
...并检查该文件以查看最近的 rsync 是否成功。我明确使用了>
,它将在每次rsync
运行时覆盖日志文件。
您还可以利用rsync
传输失败时以非零代码退出的事实,因此您可以这样做:
rsync ... || echo "rsync failed" | mail -s 'rsync falied' [email protected]
答案2
删除 -v 选项并添加 -q。这只会给出错误
答案3
也许您可以通过以下命令使用系统日志:记录器。
我以这种方式运行脚本:
rsync -v what user@host 2>&1 | logger -t backup
/var/log/messages
这将默认写入。