2

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

NPIPE=/tmp/$$_$RANDOM.tmp  
mknod $NPIPE p  
tee <$NPIPE /dev/tty | ( while read line; do echo "$(date): ${line}"; done ) >> $LOG_FILE &
exec 1>&-  
exec 1>$NPIPE  
exec 2>&-  
exec 2>$NPIPE  

Теперь в этом же сценарии я загружаю файл журнала на сервер. Файл журнала на локальном устройстве (встроенный) выглядит завершенным, но файл журнала на сервере всегда является частичным.

У меня возникает ощущение, что канал все еще очищается в блоках и все еще содержит содержимое, когда я отправляю журнал, возможно, мне не хватает какой-то команды очистки, но я не могу найти ничего подобного.

Любой совет?

1 ответ1

2

Я считаю, что вам нужно закрыть трубу

exec 1>&-
exec 2>&-

Затем, после того, как вы загрузите файл журнала, вам нужно , чтобы начать новый процесс tee

tee <$NPIPE /dev/tty | ( while read line; do echo "$(date): ${line}"; done ) >> $LOG_FILE &
exec 1>$NPIPE
exec 2>$NPIPE

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .