스크립트 로그 항목에 타임스탬프 추가

스크립트 로그 항목에 타임스탬프 추가

exec 22>&2 21>&1 1>$log 2>&1현재 stderr 및 stdout을 로그 파일에 쓰는 데 사용하는 bash 스크립트가 있습니다 . 각 항목에 타임스탬프를 추가하고 싶지만 그렇게 하는 쉬운 방법을 찾지 못했습니다. 이상적으로는 나머지 명령보다 먼저 같은 줄에 시간을 기록하여 현재 명령을 간단히 변경하는 것입니다.

다음은 명령을 사용하는 스크립트입니다.

#!/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

답변1

귀하의 스크립트를 더 많이 보지 않고는 귀하의 특정 요구에 가장 적합한 방법을 말할 수 없습니다. 그러나 이는 귀하의 필요에 맞게 조정할 수 있는 일반적인 방법입니다.

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

답변2

다음을 사용하여 스트림 편집 sed:

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

파이프 사용 :

[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 ~]# 

관련 정보