Команда 'script' ничего не печатает при запуске systemd в TTY - PullRequest
0 голосов
/ 17 июня 2020

Общая цель: использовать rclone во время выключения для синхронизации c с облаком и немного изменить его вывод. Я создал модуль 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 при выключении и перезагрузке. Скрипт может отличать guish один от другого и выполнять синхронизацию c только во время выключения. Хорошо, как изменить вывод 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, который отображается во время выключения. Кто-нибудь знает, как это исправить? Спасибо!

...