我有一个程序(服务器),我正在寻找一种方式(脚本),将redirect(或更好地复制)其所有的stdout
文件,并为每个条目添加时间戳。 我已经做了一些研究,最远的我可以得到感谢如何添加时间戳STDERRredirect 。 它redirectstdout
但添加的时间戳是脚本结束的时间:
#!/bin/bash ./server | ./predate.sh > log.txt
predate.sh
代码:
#!/bin/bash while read line ; do echo "$(date): ${line}" done
我是一个Linux初学者,我显然错过了一些非常重要的东西,因为看起来服务器输出在程序退出后被刷新(没有redirect它工作正常)。 另外,如果我尝试使用predate.sh
在给定的例子中提到的线程,它完美的作品。 我知道这很容易添加一个时间戳到主程序,但我宁愿避免编辑它的代码。
编辑:唯一的工作答案在评论
我最近需要的是:在串行控制台(picocom)中接收日志消息,将它们打印到终端和文件,并预先设定日期。
我现在用的是s.th. 喜欢这个:
picocom -b 115200 /dev/tty.usbserial-1a122C | awk '{ print strftime("%s: "), $0; fflush(); }' | tee serial.txt
picocom
的输出picocom
送到awk
awk
prepends日期( %s
选项将时间转换为自1970-01-01 00:00:00 UTC以来的秒数 – 或者使用%c
作为人类可读的格式) fflush()
在awk
刷新任何缓冲的输出 tee
一些东西) 对于我你的代码工作得很好
检查这是我试过的
test.sh
#!/bin/bash while true; do echo "hello" done
predate.sh
#!/bin/bash while read line; do echo $(date) ":" $line; done
然后
./test.sh | ./predate.sh
给我
Tue Jan 14 17:49:47 IST 2014 : hello Tue Jan 14 17:49:47 IST 2014 : hello Tue Jan 14 17:49:47 IST 2014 : hello Tue Jan 14 17:49:47 IST 2014 : hello Tue Jan 14 17:49:47 IST 2014 : hello Tue Jan 14 17:49:47 IST 2014 : hello Tue Jan 14 17:49:47 IST 2014 : hello Tue Jan 14 17:49:47 IST 2014 : hello Tue Jan 14 17:49:47 IST 2014 : hello Tue Jan 14 17:49:47 IST 2014 : hello Tue Jan 14 17:49:47 IST 2014 : hello Tue Jan 14 17:49:47 IST 2014 : hello Tue Jan 14 17:49:47 IST 2014 : hello Tue Jan 14 17:49:47 IST 2014 : hello Tue Jan 14 17:49:47 IST 2014 : hello
这可以使用“>”或“>>”重定向到某个文件进行追加
如果我明白你的问题是在你的log.txt文件中包含stderr输出。 对 ? 如果这就是你想要的解决方案是:
./server 2>&1 | ./predate.sh> log.txt
问候
我使用上面的例子:picocom -b 115200 /dev/tty.usbserial-1a122C | awk'{print strftime(“%s:”),$ 0; fflush(); }'| tee serial.txt
转储/重定向日志文件中的telnet输出数据,但我不能在后台运行我的脚本。 如果我使用'&'来运行它的背景,那么它不起作用。
第一点:没有“&”的工作命令:脚本:dumpper.sh telnet $ 1 $ 2 | awk'{print strftime(“%s:”),$ 0;}'| tee $ host。$ port.log;
命令:./dumpper.sh 16.1.1.8 202
第一点:不能用'&'命令:脚本:dumpper.sh telnet $ 1 $ 2 | awk'{print strftime(“%s:”),$ 0;}'| tee $ host。$ port.log 2>&1;
命令:./dumpper.sh 16.1.1.8 20224&
我正在运行这样的cron工作:
0 * * * * user /home/user/script.sh >>stdout.log
然后在script.sh中,我有这样的东西:
#!/bin/bash date do_some_code
由于“日期”是我的script.sh的标准输出的一部分,时间戳是每个stdout.log条目中的第一行。