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