Zeitstempel zu Skriptprotokolleinträgen hinzufügen

Zeitstempel zu Skriptprotokolleinträgen hinzufügen

Derzeit verwende ich mein Bash-Skript, exec 22>&2 21>&1 1>$log 2>&1um stderr und stdout in eine Protokolldatei zu schreiben. Ich würde gerne jedem Eintrag einen Zeitstempel hinzufügen, habe aber noch keine einfache Möglichkeit dafür gefunden. Idealerweise wäre es eine einfache Änderung des aktuellen Befehls, bei der die Zeit in dieselbe Zeile vor dem Rest geschrieben wird.

Hier ist ein Skript, in dem ich den Befehl verwende:

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

Antwort1

Ohne Ihr Skript genauer zu sehen, kann ich Ihnen nicht sagen, was für Ihre speziellen Anforderungen am besten geeignet ist. Dies ist jedoch eine allgemeine Methode, die an Ihre Anforderungen angepasst werden kann.

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

Jeder ausgegebenen Textzeile wird der Zeitstempel für den Zeitpunkt vorangestellt, zu dem sie aufgetreten ist. Die Ausgabe sieht ungefähr so ​​aus:

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

Antwort2

Stream bearbeiten mit sed:

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

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

verwandte Informationen