unix中的日志文件时间戳

时间:2014-12-09 16:10:31

标签: unix ksh

我有一个脚本,我这样运行:

nohup ksh93 -c ". ./cmdtst_multi.ksh" > prcsstst.log

有没有办法为它在命令中的日志文件中写入的每一行添加时间戳?或者在我的脚本内部,我是否必须在每个" echo"中包含时间戳。功能?

3 个答案:

答案 0 :(得分:1)

顺便说一句,几周前我写了一件事就是这样做。

命令本身是:

gawk '{ print strftime("[%H:%M:%S]"), $0; fflush(); }'

或者,如果你没有gawk:

perl -MPOSIX=strftime -ne 'print strftime("[%H:%M:%S] ", localtime()).$_;'

您可以将其整合:

nohup ksh93 -c ". ./cmdtst_multi.ksh" | either_example_above > prcstst.log

答案 1 :(得分:0)

如果您不从脚本执行此操作,则脚本的每个输出行都将具有相同的时间戳。例如,您可以使用awk:

来执行此操作
nohup ksh93 -c ". ./cmdtst_multi.ksh" | awk '{ print strftime("%Y-%m-%d %H:%M:%S"), $0; fflush(); } > prcsstst.log

如果您的脚本运行了很长时间,并且您对每个回声的确切时间戳感兴趣,则必须修改每个回声。您可以使用上面的awk命令执行此操作,但您也可以使用" date"代替

答案 2 :(得分:0)

您可能需要取消缓冲管道的ksh脚本端。没有测试,我猜是

nohup ksh -c '
    stdbuf --output=L ksh -c ". ./cmdtst_multi.ksh" | 
    while IFS= read -r line; do
        print "$(date "+[%T]") - $line"
    done
' > prctst.log

stdbuf在GNU coreutils中,因此您的“unix”平台可能没有它。如果您安装了expect,则PATH中可能会unbuffer执行相同的工作。