Linux

設置腳本命令的執行時間以記錄終端活動

  • December 14, 2020

我想設置一個腳本來記錄終端活動。在尋找各種來源後,我想到了使用腳本命令來執行此任務的想法。但是,如果我只使用腳本命令,例如:script - a /var/log/session/terminal.log我必須exit每次手動輸入以停止script命令並完成我的記錄。我嘗試使用timeoutscript命令設置執行時間,但script命令實際上被信號殺死,並且錄製文件留空,沒有任何記錄。

其實我想設置一個執行時間來記錄終端,不斷的將內容記錄到文件中。此外,如果有人不小心關閉了終端,所有內容都會在退出前保存到一個文件中。你能給我一些關於這個問題的建議嗎?

非常感激

script命令打開一個新的 shell。因此,它像普通 shell 一樣退出。定時退出不可用,因為您使用它的方式(IIUC)是互動式的。它在“退出”或Ctrl+時退出d

如果輸入來自腳本,則任何指示文本/傳輸/輸入文件結束的內容也會使 shell 退出。

可以使用信號來退出該外殼,但它需要一個監督腳本。從bash手冊頁:

The shell exits by default upon receipt of a SIGHUP

因此,如果您可以啟動一個 shell 並擷取它的程序 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

引用自:https://unix.stackexchange.com/questions/624416