Вход в файл, предварительное ожидание метки времени к каждой строке (Debian)

echo -e "MyValue\nMyOtherValue" | ./script.sh
4
задан 18 January 2011 в 13:24
4 ответа

функция регистратора состоит в том, чтобы на самом деле шунтировать сообщения к системному журналу; конфигурации по умолчанию будут предварительно ожидать метку времени и выписывать журналы к/var/log/messages, но это не означает, что цель регистратора состоит в том, чтобы предварительно ожидать метку времени.

Один способ обработать это состоял бы в том, чтобы изменить Ваши конфигурации системного журнала, таким образом, что Ваши сообщения, направленные через регистратор, переходят к специальному файлу - используют флаг "-p" для регистратора для предусматривания facility.priority пары (возможно, один из пользователя [1.. 7] средства), и настраивают Ваш syslogd для входа того средства в специальный файл.

С другой стороны, Вы могли сделать на скорую руку быструю функцию оболочки для простого предварительного ожидания метки времени:

Bodacious:~ james$ timestamp () {
> f=`date`
> echo $f $*
> }
You have new mail in /var/mail/james
Bodacious:~ james$ timestamp a line of logs
Tue 18 Jan 2011 22:40:24 EST a line of logs
Bodacious:~ james$ 

В моей системе это собирается привести к оболочке, разветвляющейся/bin/date однажды на строку вывода. Это неэффективно, но вероятно приемлемо в мелких масштабах.

6
ответ дан 3 December 2019 в 02:38

Вы могли использовать -t отметить каждую строку и затем заставить Ваш сервер системного журнала фильтровать в различный файл на основе того тега.

(Отредактированный для вынимания неправильной ссылки к -f флаг)

0
ответ дан 3 December 2019 в 02:38

Используя ответ от Команды для предварительного ожидания строки к каждой строке?, я нашел это самым легким решением:

cmd | sed "s/^/`date +'%a %b %d %k:%M:%S'` /"
0
ответ дан 3 December 2019 в 02:38

Мне нужно было что-то в этом роде, и Google нашел меня здесь. Использование чего-то вроде syslog определенно является излишним для того, чтобы просто попытаться отследить время, а распечатка каждую секунду слишком неудобна.

Вот однострочник, который, кажется, работает нормально:

cmd | { while read R; do echo "$(date +%s) $R"; done }

и вариант, который печатает время, необходимое для создания каждой строки:

cmd | { T=$(date +%s); while read R; do T2=$(date +%s); echo "$((T2-T)) $R"; T=$T2; done }

(Это использует секунды, вероятно, не так уж сложно добавить туда% N, но на этом уровне решение оболочки, вероятно, в любом случае не подходит.)

4
ответ дан 3 December 2019 в 02:38

Теги

Похожие вопросы