为脚本日志条目添加时间戳记

目前我有我的bash脚本使用exec 22>&2 21>&1 1>$log 2>&1将stderr和stdout写入日志文件。 我想为每个条目添加一个时间戳,但我还没有find一个简单的方法来做到这一点。 理想情况下,对当前的命令进行简单的更改,而将其余时间写在同一行上。

以下是我使用以下命令的脚本:

 #!/bin/bash #This script takes the server to rysnc as an argument. You can also tell #the script to check the server_status.txt file. # #Example: /path/to/script/sync.sh grail true # #The arguments are order senstive. The server name must come before the status #check value. #Logfile LOG=/var/log/sync.log DIRECTORYS="auth/ keys/ log/mailwhen/ intranet/ www/calmaa/data/ www/admatch/data/ www/sfhsa/data/ www/hfa3_org www/padmatch/ www/serverdown/" if [ "x$2" == "xfalse" ]; then return 0 elif [ "x$2" == "xtrue" ]; then if [ `cat /srv/www/wan*/server_status.txt` == "primary" ]; then exit 0 fi else echo "Please use \"true\" or \"false\" for the second value." exit 1 fi # Copy stdout and stderr, and then open the logfile exec 22>&2 21>&1 1>$log 2>&1 # Here is how to restore stdout and stderr: # exec 2>&22 1>&21 for DIRECTORY in $DIRECTORYS; do rsync -azu --delete --bwlimit=500 $1:/srv/$DIRECTORY /srv/$DIRECTORY done 

没有看到更多你的脚本,我不能告诉你为你的特殊需要的最佳方式。 但是,这是一个可以根据您的需要进行调整的一般方法。

 exec > >(while read -r line; do printf '%s %s\n' "$(date --rfc-3339=seconds)" "$line"; done) 

输出的每一行文本都将具有所发生时间的时间戳。 输出结果如下所示:

 2013-09-04 21:32:14-05:00 An event occurred and this is the message 2013-09-04 21:32:37-05:00 Some time passed, another event produced a message 

sed编辑stream:

 sed "s/^/$(date -u) /" 

使用pipe道:

 [root@giomacdesk ~]# cat test.txt asd1 asd2 [root@giomacdesk ~]# cat test.txt |sed "s/^/$(date -u) /" ოთხ სექ 4 19:00:53 UTC 2013 asd1 ოთხ სექ 4 19:00:53 UTC 2013 asd2 [root@giomacdesk ~]#