Linux
設置腳本命令的執行時間以記錄終端活動
我想設置一個腳本來記錄終端活動。在尋找各種來源後,我想到了使用腳本命令來執行此任務的想法。但是,如果我只使用腳本命令,例如:
script - a /var/log/session/terminal.log
我必須exit
每次手動輸入以停止script
命令並完成我的記錄。我嘗試使用timeout
為script
命令設置執行時間,但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