总体目标是:在关机期间使用rclone
与云同步并稍微修改其输出。我创建了一个 systemd 单元:
[Unit]
Description=Syncing with MEGA cloud storage v78
After=network-online.target
[Service]
User=yevhenii
Type=oneshot
ExecStart=/bin/true
ExecStop=/usr/local/sbin/auto-sync.sh
RemainAfterExit=true
TimeoutStopSec=0
TTYPath=/dev/console
StandardOutput=tty
StandardError=inherit
[Install]
WantedBy=multi-user.target
它auto-sync.sh
在关机和重新启动时启动。脚本可以区分一个脚本并仅在关闭期间执行同步。好的,如何修改 rclone 的输出?最简单的方法如下,它不起作用,因为rclone
检测到其输出不是控制台,因此不打印执行格式化的 ANSI 代码:
# doesn't work well, formatting is ugly without ANSI codes
# prints in terminal emulator, prints in TTY during shutdown
rclone sync "$FROM" "$TO" --progress | while read line;
do
echo "[rclone] $line"
done
因此,我使用script
执行命令输出日志记录并模拟(!)控制台来执行命令的实用程序(它保留rclone
打印 ANSI 代码)。正是我所需要的!
# works like a charm
# prints in terminal emulator, does NOT print in TTY during shutdown
script --return --quiet --command "rclone sync $FROM $TO --progress" /dev/null | while read line;
do
echo "[rclone] $line" #works like a charm
done
问题是它可以在 ubuntu 终端模拟器中运行,但不能在关机期间显示的 TTY 中运行。有人知道如何解决这个问题吗?谢谢你!