端末を閉じても端末のロギングは完了しません。

端末を閉じても端末のロギングは完了しません。

これは私の最後の行です.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)。

このターミナルロギングソリューションはうまく機能します。 2つの質問だけです。

質問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

関連情報