Inclua data e hora nas entradas de log do script

3

Atualmente, tenho meu script bash usando exec 22>&2 21>&1 1>$log 2>&1 para gravar stderr e stdout em um arquivo de log. Gostaria de adicionar um carimbo de data / hora para cada entrada, mas não encontrei uma maneira fácil de fazer isso. Idealmente, seria uma simples mudança para o comando atual, com o tempo sendo escrito na mesma linha antes do resto.

Aqui está um script em que estou usando o comando:

#!/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
    
por Ironlenny 04.09.2013 / 20:47

2 respostas

3

Sem ver mais do seu roteiro, não posso dizer o melhor caminho para suas necessidades específicas. No entanto, esta é uma maneira geral que pode ser adaptada às suas necessidades.

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

Cada linha de texto que é impressa terá o registro de data e hora para a hora em que ocorreu antes. A saída será algo como isto:

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
    
por 05.09.2013 / 04:36
1

edite o stream com sed :

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

usando 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 ~]# 
    
por 04.09.2013 / 21:01