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の進行状況を定期的に表示するには?

ベストアンサー1

おすすめ記事