rsync 日志文件开始在路径中包含文字日期格式

rsync 日志文件开始在路径中包含文字日期格式

我创建了一个作为 cron 作业运行的备份 shell。这不是什么新鲜事……但在命令行中,我指定了日期格式的日志文件名。一切正常,直到它到达日志文件所在的文件夹。它创建一个同名的文件夹,看起来 rsync 正在一遍又一遍地复制该文件夹中的所有内容,包括奇怪的文件夹名称。我尝试 rsync 到安装了 DSM 6.1 的 synology。我将 synology 上的一个文件夹共享到我服务器上的 /mnt/NAS2 脚本是

/root/backup/backup_daily.sh

它被设置为每天运行一次。脚本中的命令行基本上是:

rsync -avzr --stats --progress --log-file=$(date +'%Y%m%d') --exclude-from=$EXCLUDE / /mnt/NAS2/backup

(我使用了一些变量作为选项,但为了清楚起见,用字符串代替了。我也尝试在脚本中这样做,但没有任何区别。)在排除文件中有一些文件夹,包括 /root/backup/

以下是发生的情况,请查看文件‘xx’:

2017/04/03 20:51:09 [1669] >f++++++++++ lib/xtables/libxt_time.so

2017/04/03 20:51:09 [1669] >f++++++++++ lib/xtables/libxt_tos.so

2017/04/03 20:51:09 [1669] >f++++++++++ lib/xtables/libxt_u32.so

2017/04/03 20:51:09 [1669] >f++++++++++ lib/xtables/libxt_udp.so

2017/04/03 20:51:09 [1669] cd++++++++ lib64/

2017/04/03 20:51:09 [1669] cL++++++++ lib64/ld-linux-x86-64.so.2 -> /lib/x86_64-linux-gnu/ld-2.23.so

2017/04/03 20:51:09 [1669] cd++++++++ 选择/

2017/04/03 20:51:09 [1669] cd++++++++ 根目录/

2017/04/03 20:51:09 [1669] >f+++++++++ root/.bash_history

2017/04/03 20:51:09 [1669] >f+++++++++ root/.bashrc

2017/04/03 20:51:09 [1669] >f+++++++++ root/.profile

2017/04/03 20:51:09 [1669] >f+++++++++ root/.selected_editor

2017/04/03 20:51:09 [1669] >f+++++++++ root/20170403

2017/04/03 20:51:09 [1669] >f+++++++++ root/xx

2017/04/03 20:51:09 [1669] cd+++++++++ root/+"%Y%m%d").log/

2017/04/03 20:51:09 [1669] cL++++++++ root/+"%Y%m%d").log/initrd.img -> 启动/启动 itrd.img-4.4.0-71-generic

2017/04/03 20:51:09 [1669] cL++++++++ root/+"%Y%m%d").log/initrd.img.old -> boot/initrd.img-4.4.0-70-generic

2017/04/03 20:51:09 [1669] cL++++++++ root/+“%Y%m%d”.log/vmlinuz -> boot/vmlin uz-4.4.0-71-generic

[这种情况一直持续着。]

我肯定做了一些明显错误的事情...希望我提供了足够的信息并且使用了正确的规则/缩进,因为这是该论坛的第一篇帖子。

答案1

如果您按照从终端发布到此处的命令直接运行该命令,会怎么样?

您是否尝试过将其设置--log-file为静态值?因为在我看来,这部分似乎root/+"%Y%m%d").log/vmlinuz出了问题。您的脚本中是否有其他日期定义,如“%Y%m%d”?

答案2

谢谢。如果我手动启动脚本,行为也一样。我估计如果我修复了日志文件名,就不会发生这种情况。我不在其他地方使用日期,我只在脚本中使用一次来设置变量。正如我提到的,为了简单起见,我把那部分放在命令行上。脚本很短。在这个版本中,我把日期放在命令行上,但最初我使用了 CURDATE - 没有区别。

#!/bin/bash
#
# Backup (Incremental) of server
#
LOCALDIR=/
SERVERDIR=/mnt/NAS2/backup
EXCLUDE='/root/backup/exclude.lst'
CURDATE="$(date +'%Y%m%d')"
LOGFILE="/root/backup/$CURDATE.log"

rsync -avzr --stats  \
 --progress --log-file=$(date +'%Y%m%d') \
 --exclude-from=$EXCLUDE $LOCALDIR $SERVERDIR

它在备份文件 /root/xx 之后出错,而这正是创建日志文件的位置。所以我猜它出错是因为它试图备份它正在写入的日志文件。出于这个原因,我尝试排除备份文件夹,但似乎被忽略了。我发现了一些关于排除文件的讨论,但也许我误解了,因为它仍然试图备份该文件夹。

Exclude.lst,仅供参考:

lost+found
down
/tmp
.cache
.thumbnails
/dev
/media
/mnt
/proc
/sys
/root/backup/

注意:这是一个测试服务器,不在网络上,只是为了在我将其用于实时服务器之前测试脚本:)。顺便说一句 - 使用 rsync 和 ssh 连接到 synology 似乎比备份到共享文件夹更好,但即使在使用 ssh-copy-id 复制密钥后,synology 仍会要求输入密码,所以这是另一个挑战。再次感谢您的帮助。

相关内容