У меня есть сценарий, который выводит много отладочных данных, которые я бы не хотел сохранять на диске (особенно потому, что файловая система находится на карте флэш-памяти). Поэтому я запускаю его в фоновом режиме с помощью 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
; но на данный момент этого достаточно и он отвечает на вопрос. По-прежнему приветствуются различные реализации.