我有一个不断运行的脚本,我将其输出到日志文件:
script.sh >> /var/log/logfile
我想在附加到日志的每一行之前添加一个时间戳。例如:
Sat Sep 10 21:33:06 UTC 2011 The server has booted up. Hmmph.
有什么柔术我可以使用的吗?
答案1
您可以通过以当前日期和时间作为前缀的循环来传输脚本的输出:
./script.sh | while IFS= read -r line; do printf '%s %s\n' "$(date)" "$line"; done >>/var/log/logfile
如果你经常使用它,那么很容易创建一个 bash 函数来处理循环:
adddate() {
while IFS= read -r line; do
printf '%s %s\n' "$(date)" "$line";
done
}
./thisscript.sh | adddate >>/var/log/logfile
./thatscript.sh | adddate >>/var/log/logfile
./theotherscript.sh | adddate >>/var/log/logfile
答案2
ts
从Ubuntu软件包中查看moreutils
:
command | ts
或者,如果$command
确实进行自动缓冲(需要expect-dev
包):
unbuffer command | ts
答案3
这日期指挥部将提供该信息
date -u
Sat Sep 10 22:39:24 UTC 2011
所以你可以
echo $(date -u) "Some message or other"
这就是你想要的吗?
答案4
您可以简单地回声该命令输出到日志文件。即
echo "`date -u` `./script.sh`" >> /var/log/logfile
真的行 :)
例子:
[sparx@E1]$ ./script.sh
Hello Worldy
[sparx@E1]$ echo "`date -u` `./script.sh`" >> logfile.txt
[sparx@E1]$ cat logfile.txt
Mon Sep 12 20:18:28 UTC 2011 Hello Worldy
[sparx@E1]$