在 TTY 中由 systemd 启动时 script 命令不打印任何内容

在 TTY 中由 systemd 启动时 script 命令不打印任何内容

总体目标是:在关机期间使用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 中运行。有人知道如何解决这个问题吗?谢谢你!

相关内容