我有一个脚本,我这样运行:
nohup ksh93 -c ". ./cmdtst_multi.ksh" > prcsstst.log
有没有办法为它在命令中的日志文件中写入的每一行添加时间戳?或者在我的脚本内部,我是否必须在每个" echo"中包含时间戳。功能?
答案 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
执行相同的工作。