script 명령은 TTY에서 systemd에 의해 시작될 때 아무것도 인쇄하지 않습니다.

script 명령은 TTY에서 systemd에 의해 시작될 때 아무것도 인쇄하지 않습니다.

전반적인 목표는: 종료 중에 Sync with Cloud를 사용 rclone하고 출력을 약간 수정합니다. 나는 시스템 단위를 만들었습니다.

[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그래서 명령 출력 로깅을 수행하고 콘솔을 에뮬레이트(!)하여 명령을 실행하는 유틸리티를 사용합니다 ( rcloneANSI 코드를 계속 인쇄합니다). 나에게 딱 필요한 것!

# 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

문제는우분투 터미널 에뮬레이터에서는 작동하지만 종료 중에 표시되는 TTY에서는 작동하지 않습니다. 이 문제를 해결하는 방법을 아는 사람이 있나요? 감사합니다!

관련 정보