В настоящее время я использую свой скрипт bash exec 22>&2 21>&1 1>$log 2>&1
для записи stderr и stdout в файл журнала. Я хотел бы добавить временную метку для каждой записи, но не нашел простого способа сделать это. В идеале это было бы простое изменение текущей команды с записью времени на той же строке перед остальным.
Вот скрипт, в котором я использую эту команду:
#!/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 ~]#