Когда команда tee перенаправляет на subshell, последние две строки отсутствуют
Ниже приведено решение для записи команды и ее вывода, выполненного на удаленной машине:
rexec:// -t -t /usr/bin/ssh -q -x -o StrictHostKeyChecking=no -2 \
-l ${SSHUserName} -p 22 ${mainHost} \
| tee >(/opt/oss/clilogging/bin/clilogging.sh para1 para2)
clilogging.sh
запишет каждую команду и ее вывод в файл журнала.
Однако иногда последняя вышедшая команда и ее выходное сообщение "logout" не записываются в файл журнала.
clilogging.sh
как следует:
#!/bin/bash
{
while read R || [ -n "$R" ];do
#e.g. 2013-08-19T09:58:08+0300
timestamp=`date +%FT%T%z`;
echo $timestamp $R;
done
} > /tmp/xxx.log
Кто-нибудь может мне помочь? Большое спасибо!
1 ответ
Решение
Спасибо Тому за комментарий и спасибо всем.
Я нашел решение этой проблемы.
Нужно добавить следующий код в начале clilogging.sh
trap "" HUP
Смысл кода заключается в обработке сигнала SIGHUP, здесь я игнорирую этот сигнал, а затем clilogging.sh
не завершит работу немедленно и сможет обработать весь буфер.
человек 7 сигнал
Signal Value Action Comment
-------------------------------------------------------------------------
SIGHUP 1 Term Hangup detected on controlling terminal
or death of controlling process