作为 systemd 服务运行时如何显示 rsync 进度

作为 systemd 服务运行时如何显示 rsync 进度

我有一个 bash 脚本sync_nodes.sh,我想用 systemd 单元来管理它sync_nodes.service

我希望命令的进度rsync显示在我的日志中。当我以交互方式运行命令时,我每秒都会收到一个进度记录,这就是我想要的;但是,当我运行时,sync_nodes.service直到 rsync 作业完成时,进度信息才会发送到日志。

sync_nodes.sh

#!/bin/bash
echo starting...
for host in 192.168.42.3{0,1,2}
do
        rsync \
        --progress \
        --archive \
        --delete \
        --compress \
        -e 'ssh -i /home/ops/private_key -o StrictHostKeyChecking=no' \
        /home/ops/code/ \
        "ops@${host}:/home/ops/code/" \
        | stdbuf --output L tr '\r' '\n' \
        | sed 's/^[[:space:]]*//'
done

当我运行sync_nodes.sh交互时,会打印我想要的状态信息

$ ./sync_nodes.sh
starting...
sending incremental file list
sending incremental file list
sending incremental file list
./
model.data

32,768   0%    0.00kB/s    0:00:00
21,233,664   1%   20.22MB/s    0:00:50
42,565,632   3%   20.29MB/s    0:00:49
62,193,664   5%   19.77MB/s    0:00:49
# ...

sync_nodes.service

[Service]
ExecStart=/home/ops/sync_nodes.sh
SyslogIdentifier=sync_nodes

启动装置

sudo systemctl start sync_nodes.service

查看日志输出:

$ sudo journalctl -f -u sync_nodes
Sep 11 20:25:58 srv0 systemd[1]: Starting sync_nodes.service...
Sep 11 20:25:58 srv0 sync_nodes[6138]: starting...
Sep 11 20:25:58 srv0 systemd[1]: Started sync_nodes.service.
Sep 11 20:25:59 srv0 sync_nodes[6138]: sending incremental file list
Sep 11 20:25:59 srv0 sync_nodes[6138]: sending incremental file list

最终,所有状态都会在传输完成后打印到日志中。我希望定期打印进度。

如何在日志中定期显示 rsync 进度?

相关内容