我在 Jenkins 中运行了很长时间(几个小时)的 Rsync 备份任务。
Rsync
打印进度输出到日志。在终端中查看时 - 最后一行是“令人耳目一新”,即它不断地打印出来。但是当詹金斯运行任务时 - 它不会显示该信息。
这是我在 Jenkins 中看到的,而任务正在运行:
这是我在完成后看到的(这就是我想在运行时实时看到的):
sending incremental file list
35-openMeet-flat.vmdk
131,072 0% 0.00kB/s 0:00:00
9,437,184 0% 8.88MB/s 1:38:26
21,757,952 0% 10.30MB/s 1:24:49
32,899,072 0% 10.40MB/s 1:23:58
44,302,336 0% 10.49MB/s 1:23:12
55,443,456 0% 10.92MB/s 1:19:55
66,191,360 0% 10.56MB/s 1:22:40
78,118,912 0% 10.73MB/s 1:21:17
Run Code Online (Sandbox Code Playgroud)
如何配置 Jenkins在任务运行时打印完整的输出?
PS 我会很高兴,即使我需要查找并查看一些 Jenkins 日志文件。但目前我找不到任何东西。例如我试过这个:
slavik@ubhome:/var/lib/jenkins/jobs/backup ESXI VM/builds/34$ tail log
sending incremental file list
35-openMeet.vmdk
532 100% 0.00kB/s 0:00:00 (xfr#1, to-chk=0/1)
sent 434 bytes received 41 bytes 190.00 bytes/sec
total size is 532 speedup is 1.12
Comparing file sizes...
Sizes are different, calculating delta checksums, can take a while, time for a coffee...
sending incremental file list
35-openMeet-flat.vmdk
slavik@ubhome:/var/lib/jenkins/jobs/backup ESXI VM/builds/34$
Run Code Online (Sandbox Code Playgroud)
但是正如您所看到的,它没有显示带有进度数据的最后一行。看起来它保存在 RAM 中,并且在它真正成为新行之前不会写入磁盘。
当然,这是一年多之后,但我偶然发现了这个问题,希望能找到答案。失败了,我设法找到了解决方案,并认为我会为互联网的其余部分分享。
您想要做的是“取消缓冲” rsync 命令。有几个项目可以“解除缓冲”(unbuffered,expect的unbuffer
命令),但这些对我来说不太合适。Unbuffered 很接近,但在我的日志中扔了一堆我不想要的换行符(在使用了-c
防止到处重复行的标志之后)。
最终的工作是这样的:通过 stbuf 将我的 rsync 命令与在链接中找到的标志进行管道传输。现在我的 jenkins 控制台很好很漂亮并且跟上 rsync 的进度:
rsync -avz --progress <source> <destination> | stdbuf -oL tr '\r' '\n'
归档时间: |
|
查看次数: |
1187 次 |
最近记录: |