Назад | Перейти на главную страницу

Стриминг stdout

У меня есть сценарий, который выводит много отладочных данных, которые я бы не хотел сохранять на диске (особенно потому, что файловая система находится на карте флэш-памяти). Поэтому я запускаю его в фоновом режиме с помощью nohup + & утилизация stdout и stderr к /dev/null.

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

Я думал о перенаправлении вывода на локальный сокет UDP, чтобы я мог подключаться и отключаться от «потока», никоим образом не затрагивая сценарий, и тот же самый сценарий не побеспокоился бы, если кто-то слушает данные. Но меня интересуют различные техники, которые я мог бы использовать, и инструменты, которые уже доступны.

Как я могу транслировать вывод запущенного процесса?

Ограничение

Я не могу изменить библиотеку, которая выводит отладочную информацию в stdout. Я должен передать сценарий stdout в программу, которая может передавать его (не сохраняя на диск весь вывод).

Передайте вывод в NetCat, который может передавать данные в сокет UDP.

Как отметил @Eric Renouf, screen достаточно, чтобы уловить трюк. Варианты ведения журнала screen тоже действительно полезны, так как в любой момент внутри сеанса файл журнала можно включить и выключить с помощью C-a H или с :log команда как задокументировано в руководстве. Таким образом, легко и точно контролировать, какая часть вывода записывается.

Запуск скрипта:

screen -dmS $SESSION_NAME "$SCRIPTDIR/$SCRIPT_NAME" 2>&1

Остановка скрипта:

pkill -f "$BIN .+/$SCRIPT_NAME"

Я хотел немного более простой стиль Linux, работающий по принципу "все в файле", чтобы можно было использовать более простые инструменты, такие как tee; но на данный момент этого достаточно и он отвечает на вопрос. По-прежнему приветствуются различные реализации.