当我关闭终端时,终端日志记录未完成

当我关闭终端时,终端日志记录未完成

这是我的最后一行.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)。

这个终端日志记录解决方案效果很好。只有两个问题:

问题一:Alt如果我使用+退出 gnome 终端F4,则日志不会被压缩。为什么?在这种情况下我该如何压缩它们?

问题2:我不想使用.bashrc-cp文件。有什么解决办法吗?

答案1

Q1
当您 ALT+F4 终端时,它会向 shell 发送 SIGHUP。然后 shell 退出并向该 shell 下运行的所有内容发送 SIGHUP。因为shell退出后,它会停止处理所有命令,因此执行后的所有内容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 中,>(cmd)是一种特殊的语法,它运行cmd并替换为连接到STDIN 的>(cmd)命名管道的路径。cmdnohup是必要的,这样当 shell 退出时,gzip 就不会收到 SIGHUP 信号而死掉。相反,它将在其 STDIN 上获取 EOF,以便可以刷新其缓冲区,然后退出。

Q2
我不确定 .bashrc-cp 是什么。如果您想避免递归循环,您可以export STARTTIME在启动之前(或其他变量)script检查它是否存在。如果存在,请勿启动script

相关内容