systemd 서비스로 실행될 때 rsync 진행 상황을 표시하는 방법

systemd 서비스로 실행될 때 rsync 진행 상황을 표시하는 방법

나는 bash 스크립트를 가지고 sync_nodes.sh있고 그것을 관리하기 위해 systemd 장치를 사용하고 싶습니다 sync_nodes.service.

내 로그에 명령 진행 상황을 rsync표시하고 싶습니다. 명령을 대화형으로 실행하면 매초마다 진행 기록이 수신됩니다. 이는 제가 원하는 것입니다. 그러나 실행하면 sync_nodes.servicersync 작업이 완료될 때까지 진행 정보가 로그에 전송되지 않습니다.

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 진행 상황을 주기적으로 표시하는 방법은 무엇입니까?

관련 정보