我有一个 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 进度?