在bash中创建详细的自我跟踪日志

时间:2013-05-13 05:07:09

标签: bash logging

我知道您可以在运行脚本之前和之后在终端中键入script nameOfLog.txtexit来创建输出日志,但我想在实际脚本中编写它以创建一个自动登录。我对exec >>log_file 2>&1行有一个问题:

代码将输出重定向到日志文件,用户无法再与其进行交互。如何创建一个日志,它只是基本上复制输出中的内容?

而且,是否可以让它自动记录复制文件的过程?例如,如果将/home/user/Deskop/file.sh中的文件复制到/ home / bckup,是否可以将其打印在日志中,或者我是否必须手动编写?

是否也可以记录运行整个过程所花费的时间并计算已处理的文件和目录的数量,或者我是否也必须手动编写?

我的未来自我感谢所有的帮助!

以下是我的全部代码:

#!/bin/bash    

collect()
{
find "$directory" -name "*.sh" -print0 | xargs -0 cp -t ~/bckup #xargs handles files names with spaces. Also gives error of "cp: will not overwrite just-created" even if file didn't exist previously
}
echo "Starting log"
exec >>log_file 2>&1
timelimit=10
echo "Please enter the directory that you would like to collect.
If no input in 10 secs, default of /home will be selected"

read -t $timelimit directory

if [ ! -z "$directory" ] #if directory doesn't have a length of 0
then
echo -e "\nYou want to copy $directory." #-e is so the \n will work and it won't show up as part of the string
else
directory=/home/
echo "Time's up. Backup will be in $directory"
fi

if [ ! -d ~/bckup ]
then
echo "Directory does not exist, creating now"
mkdir ~/bckup
fi 

collect
echo "Finished collecting"

exit 0

1 个答案:

答案 0 :(得分:1)

回答“如何只复制输出”的问题:使用一个名为tee的程序,然后在这里解释一下exec magic: redirect COPY of stdout to log file from within bash script itself

关于分析(需要时间,访问的文件等) - 这有点困难。一些可以帮助你的程序是时间(1):

time - run programs and summarize system resource usage

和strace(1):

   strace - trace system calls and signals

查看手册页以获取更多信息。如果您可以控制脚本,那么自己进行日志记录可能更容易,而不是解析strace输出。