@glaucidium

Как сделать realtime лог в терминале?

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

Рассмотренные решения:
• Cразу писать в логирующий терминал.
echo “$message” > /dev/tty2
Проблема в том, что номера терминалов создаются динамически и корректировать основной скрипт при каждом запуске не захочется.
• Писать в файл.
Тогда придётся писать просматривающую программу с бесконечным циклом, отслеживанием разницы, уделанием. Думаю, это жирно для такой задачи.
• Писать в трубу.
tty1:   ping toster.ru > pipe
tty2:   cat pipe

То, что нужно! Но труба заблокирует основной скрипт, если её никто не будет читать.

Может быть возможно как-то узнать, полна ли труба перед тем как писать в неё?
Или есть какое-то стандартное решение?
  • Вопрос задан
  • 168 просмотров
Решения вопроса 1
xotkot
@xotkot
хорошо есть и хорошо весьма
• Писать в файл.
Тогда придётся писать просматривающую программу с бесконечным циклом, отслеживанием разницы, уделанием. Думаю, это жирно для такой задачи.

tail -f ФАЙЛ

можно еще как вариант:
mkfifo fileFIFO #создать файл(именованный канал) fifo
exec 4<>fileFIFO #открыть дескриптор файла на чтение/запись
echo Test1 >&4
...
echo TestN >&4
exec 4>&- #закрыть

читать(от открытия до закрытия):
cat fileFIFO
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
moropsk
@moropsk
lnav
Ответ написан
Комментировать
andgera
@andgera
терминал запуска программы, скрипта
$ ping 8.8.8.8 | logger -t mycmd

любой другой терминал
$ journalctl -ft mycmd
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы