如何向 bash 脚本日志添加时间戳?

如何向 bash 脚本日志添加时间戳?

我有一个不断运行的脚本,我将其输出到日志文件:

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]$ 

相关内容