您如何监控 DejaDup 的进度?

您如何监控 DejaDup 的进度?

我有“备份”DejaDup 应用程序,可以将我的主文件夹备份到加密的外部 USB 硬盘上,但需要几个小时。GUI 的“立即备份”按钮呈灰色,表示正在运行,Gnome 显示“正在启动计划备份”。但是,我不知道需要多长时间。有没有办法从 DejaDup 获取进度信息?

Top 显示 duplicity 进程正在使用选项 运行--log-fd=16。Duplicity 的手册页表明这是它将状态更新写入的日志文件的文件描述符。但是,如果我运行tail -f 16,我会得到错误tail: no files remaining。我如何读取这个日志文件描述符?

答案1

我认为你可以像这样监控它:

使用 ps,获取 PID 和日志 fd,例如

$ ps aux | grep duplicity
username  12345 97.2  4.9 878235 345123 ?       Rsl  02:21  15:02 python2 /usr/bin/duplicity --exclude=/run/media/..... --tempdir=/home/username/.cache/deja-dup/tmp --log-fd=18

PID 为 12345,文件描述符为 18。

然后转到/proc/PID/fd (/proc/12345/fd)并尝试跟踪文件描述符 18,而是使用 cat 或 grep。

$ cat 18

这对我来说显示了太多信息。其中 90% 是我排除的 glob。

$ grep "examining path" 18

非常适合查看正在检查哪个文件。如果您查看输出,您还可以关注它何时发现文件匹配(并且不需要备份)或何时发现文件不同。

答案2

根据@RichardSchwarting 提供的解决方案,我创建了以下命令来检查进程是否正在运行以及是否执行 cat on /proc/x/fd/y

pid=$(pgrep -n duplicity); if [ $pid ]; then fd=$( ps -o cmd --no-headers $pid | sed -E 's/.+(log-fd=[0-9]+).?/\1/' | cut -f2 -d =); if [ $fd ]; then cat /proc/$pid/fd/$fd; else echo "fd not found"; fi else echo "pid not found"; fi

答案3

我增强了理查德的回答。 https://askubuntu.com/a/952872/359904

cat /proc/$(pgrep duplicity)/fd/$(ps aux | grep duplicity | perl -lne 'push @a,/fd=(\d+)/g;END{print "@a"}')

参考: https://stackoverflow.com/questions/17462659/search-for-a-string-and-print-next-to-that-using-sed-awk

相关内容