我有“备份”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"}')