터미널을 닫을 때 터미널 로깅이 완료되지 않습니다.

터미널을 닫을 때 터미널 로깅이 완료되지 않습니다.

이것은 나의 마지막 줄입니다 .bashrc(가독성을 위해 줄 바꿈이 삽입되었습니다).

STARTTIME=`date +%F-%Hh-%Mm-%Ss-%N`; \
script -q -t 2> /home/USER/logs/$STARTTIME-timing.txt \
       -c 'bash --rcfile /home/USER/.bashrc-cp' \
       -f /home/USER/logs/$STARTTIME-log.txt; \
gzip -9 /home/USER/logs/$STARTTIME-timing.txt /home/USER/logs/$STARTTIME-log.txt; \
exit 0

/home/USER/.bashrc-cp언급되지 않은 마지막 줄이 있습니다 (그러나 그것은 나의 정확한 사본입니다 .bashrc).

이 터미널 로깅 솔루션은 훌륭하게 작동합니다. 두 가지 질문만 하면 됩니다.

질문 1:Alt+를 사용하여 gnome 터미널을 종료하면 F4로그가 압축되지 않습니다. 왜? 이 경우 어떻게 압축할 수 있나요?

질문 2:파일을 사용하고 싶지 않습니다 .bashrc-cp. 해결책이 있나요?

답변1

1분기
터미널에서 ALT+F4를 누르면 SIGHUP이 쉘로 전송됩니다. 그런 다음 셸이 종료되고 SIGHUP을 셸에서 실행 중인 모든 항목에 보냅니다. 셸이 종료되면 모든 명령 처리가 중지되므로 실행 후의 모든 명령이 script실행되지 않습니다.

이를 수행하는 방법은 gzip을 직접 입력하는 것입니다.

STARTTIME=`date +%F-%Hh-%Mm-%Ss-%N`
script -q -t -c 'bash --rcfile /home/USER/.bashrc-cp' \
-f >(nohup gzip -9 > /home/USER/logs/$STARTTIME-log.txt.gz) \
2> >(nohup gzip -9 > /home/USER/logs/$STARTTIME-timing.txt.gz)

여기서 수행하는 작업:
bash에서는 STDIN에 연결된 명명된 파이프에 대한 경로를 >(cmd)실행하고 바꾸는 특수 구문이 있습니다 . 이는 쉘이 종료될 때 gzip이 SIGHUP 신호를 수신하지 않고 종료되도록 하기 위해 필요합니다. 대신 버퍼를 플러시한 다음 종료할 수 있도록 STDIN에서 EOF를 얻습니다.cmd>(cmd)cmdnohup

2분기
.bashrc-cp가 무엇인지 잘 모르겠습니다. 재귀 루프를 피하려면 export STARTTIME시작하기 전에 script존재하는지(또는 다른 변수)를 확인할 수 있습니다. 있는 경우 시작하지 마십시오 script.

관련 정보