端末アクティビティを記録するためのスクリプトコマンドの実行時間の設定

端末アクティビティを記録するためのスクリプトコマンドの実行時間の設定

端末アクティビティを記録するスクリプトを設定したいと思います。さまざまなソースを調べた後、これを実行するためにスクリプトコマンドを使用するというアイデアが浮上しました。ただし、たとえばスクリプトコマンドのみを使用している場合は、コマンドを停止して録音を終了するには、毎回手動で入力するscript - a /var/log/session/terminal.log必要があります。コマンドの実行時間設定を試しましたが、コマンドは実際にシグナルによって終了し、ロギングファイルは何も記録されていません。exitscripttimeoutscriptscript

実際には、実行時間を設定して端末にログを残し、常にコンテンツをファイルに記録したいと思います。また、誰かが誤って端末を閉じた場合は、終了する前にすべてがファイルに保存されます。この問題についてアドバイスをすることができますか?

ありがとう

ベストアンサー1

このscriptコマンドは新しいシェルを開きます。したがって、通常のシェルのように終了します。使用しているシェル(IIUC)が対話型であるため、タイムアウトシャットダウンは使用できません。 「終了」または+でCtrl終了しますd

入力がスクリプトから来ると、テキスト/送信/入力ファイルの終わりを示すすべての内容がシェルを終了します。

シグナルを使用してシェルを終了できますが、監督スクリプトが必要です。bashマニュアルページから:

The shell exits by default upon receipt of a SIGHUP

したがって、シェルを起動してそのプロセスIDを取得できる場合、シェルは完全に停止します。

kill -HUP $SHELLPID

これを行うスクリプトは次のとおりです。

#!/bin/bash

date=`date +%Y-%m-%d-%H%M`
logfile=`mktemp /tmp/terminal-log-${date}-XXX`

# call shell - try gnome-terminal if you prefer it
# gnome-terminal -- /usr/bin/script --quiet $logfile
xfce4-terminal --execute /usr/bin/script --quiet $logfile

ourpid=`readlink /proc/self`
scriptpid=`ps auxfw | grep -w $logfile | grep -v grep | awk '{print $2}'`
shellpid=`ps auxfw | grep -w --after=1 $logfile | grep -w --after=1 $scriptpid | tail -1 | awk '{print $2}'`

# feel free to delete this debug output
echo terminal started, script pid is $scriptpid, shell pid is $shellpid 

# sleep before stopping the shell - adjust time freely
sleep 10m

# flush script, just to be sure
kill -SIGUSR1 $scriptpid

# kill shell (cleanly, script and terminal should exit, too)
kill -HUP $shellpid

おすすめ記事