![如何记录我正在运行的程序以及运行时间(在 Ubuntu 上)?](https://linux22.com/image/1226072/%E5%A6%82%E4%BD%95%E8%AE%B0%E5%BD%95%E6%88%91%E6%AD%A3%E5%9C%A8%E8%BF%90%E8%A1%8C%E7%9A%84%E7%A8%8B%E5%BA%8F%E4%BB%A5%E5%8F%8A%E8%BF%90%E8%A1%8C%E6%97%B6%E9%97%B4%EF%BC%88%E5%9C%A8%20Ubuntu%20%E4%B8%8A%EF%BC%89%EF%BC%9F.png)
我希望有一个易于阅读的日志,记录某个特定应用程序的启动时间。日志需要包含时间戳并记录我执行的操作,例如当我启动浏览器或启动游戏时。
答案1
Bash 会记录你运行的所有命令的历史记录,你也可以让它记录时间戳 - 请参阅http://larsmichelsen.com/open-source/bash-timestamp-in-bash-history/了解更多信息。
但是 bash 历史记录不会永远保留,它仍然只记录您从命令行运行的内容。
答案2
你自己的建议一点也不差。这样的脚本可以是以下形式
#!/bin/bash
# Get the program you wish to launch from arguments
PROGNAME="$1"
# Shift script arguments to use the remaining ones later
shift
# Check that a PROGNAME was provided
if [ -z "$PROGNAME" ]; then
echo "Usage: $0 <program> [program options]"
exit 1
fi
# Log in your home directory, one directory per program
LOGDIR="$HOME/logs/$PROGNAME"
# Create log directory if it doesn't exist yet
if [ ! -d "$LOGDIR" ]; then
mkdir -p "$LOGDIR"
fi
# Get the date now
DATE=$(date +'%Y%m%d%H%M%S')
# Start program with it's options and log into the logdir
eval "$PROGNAME" $@ >"${LOGDIR}/${PROGNAME}_${DATE}.log" 2>"${LOGDIR}/${PROGNAME}_${DATE}.err"
现在,您可以很好地编辑桌面启动菜单中的条目,以便每次启动某个程序时使用包装器。
另一个选择是使用 sudo,它会自动记录到 auth.log,但使用方式是它不会以 root 身份启动程序,即:
sudo -u $USER firefox
这将使用 sudo 以您自己的身份启动 Firefox。
例如:
$ sudo -u $USER ksnapshot
# I kill the program
$ tail -1 /var/log/auth.log
Dec 28 08:20:07 jonah sudo: raphink : TTY=pts/1 ; PWD=/home/raphink ; USER=raphink ; COMMAND=/usr/bin/ksnapshot
答案3
一种可能性是编写一个小型 bash 脚本,其形式为
$ myLogging firefox
这将记录 Firefox 启动的时间,在此示例中,Firefox 启动时间,然后只需启动 Firefox。
但是,这要求我从命令行执行所有操作,例如启动应用程序。另外,如果我想使用 Firefox 自身的一些参数来启动它,该怎么办?
答案4
我不知道 'snoopy' 是否适用于 Ubuntu,但在 Debian 上,它会将您运行的每个命令记录到 /var/log/auth.log 。