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