Как я могу прекратить следующий вывод меньше, не влияя на команду, генерирующую вывод?

Я работаю на сервере, и журнал этого сервера регистрируется в терминале, а не в каком-либо файле. Я хотел бы использовать меньше, чтобы просмотреть этот журнал.

node server.js | less

Когда я просто хочу посмотреть журнал, я нажимаю Shift + F , чтобы добраться до конца файла и продолжать просматривать журналы. Когда я хочу остановить это, я использую CTRL + C .

К сожалению, это также останавливает сервер. Я просто хочу перестать смотреть конец журнала, не останавливая сервер.

Как это сделать?

10
задан 18 April 2017 в 11:57

3 ответа

Я не могу найти способ выхода из режима F в less, поэтому вам придется использовать обходной путь. Например, сохраните вывод в файл tmp, а затем просмотрите этот файл tmp:

node server.js > tmpfile & less tmpfile

& заставляет команду node.js работать в фоновом режиме. Это означает, что less tmpfile запустится немедленно и будет отслеживать tmpfile.

Однажды в less, вы можете нажать F , чтобы войти в режим слежения, но теперь Ctrl + C не будет убивать сервер, он только остановит следование. Теперь вы можете прокручивать список по своему усмотрению и нажимать F , чтобы продолжить.

0
ответ дан 18 April 2017 в 11:57

Кажется, что вы обычно не должны выходить из режима «Вперед навсегда», как руководство man less называет режим, в который вы входите, нажимая Shift + F .

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


В любом случае, вот фокус:

Я предполагаю, что вы запустили node server.js | less alredy и нажали Shift + F для входа в режим «Вперед навсегда». Теперь less больше не реагирует ни на какие нажатия клавиш.

В этом состоянии вы можете нажать Ctrl + C , чтобы завершить процесс сервера и затем выйти из less, нажав Q (что, однако, по какой-то причине оставит команду как остановленный процесс в вашем списке заданий - вы должны запустить fg, чтобы продолжить и полностью завершить ее впоследствии), но это не , что мы хотим .

Вместо этого вы также можете нажать Ctrl + Z , чтобы остановить («заморозить») команду и вернуться к приглашению оболочки. Теперь быстро наберите команду оболочки fg f ore g round»), чтобы команда продолжала работать на переднем плане. Обратите внимание, что ваш node серверный процесс также приостанавливается в течение этого короткого времени, вам необходимо решить, является ли это приемлемым или нет.

Итак, теперь less снова работает на переднем плане, как и раньше, верно? Да, , но волшебным образом больше не находится в режиме «Вперед навсегда». Вы можете использовать, например, клавиши со стрелками снова для прокрутки вверх и вниз.

К сожалению, less, похоже, прекратил полное обновление своего буфера, вы можете прокрутить вниз только до строки, в которой вы ранее заморозили команду, а не дальше. Сервер node все еще работает и выдает выходные данные, но нам просто нужно заставить less обновиться снова.

Самый простой способ, который я нашел, это просто открыть less экран справки и снова закрыть его, нажав клавиши H и Q последовательно. Теперь все, кажется, снова работает нормально.


Однако самое чистое решение, вероятно, состоит в том, чтобы следовать ответу Тердона и перенаправить вывод во временный файл, используя less для мониторинга файла.

0
ответ дан 18 April 2017 в 11:57

Как говорит ваш вопрос:

Этот сервер регистрируется в терминале, а не в каком-либо файле.

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


Именованный канал, файл fifo.

Я придумал использовать named pipe file, также известный как файл fifo, этот файл будет использоваться только для передачи ваших журналов к меньшему количеству, и на нем ничего не будет сохранено.

Сначала создайте fifo file:

mkfifo mylog

Запустите свой сервер и перенаправьте журналы в этот файл:

node server.js > mylog &

Используйте меньше, чтобы читать ваши журналы (-f заставляет меньше чтобы прочитать этот специальный файл):

less -f mylog

Теперь вы можете использовать shift + F , чтобы следовать, и CTRL + C , чтобы остановить подписку, но сервер все еще работает, вы можете снова проследить за выводом с помощью shift + F .


План резервного копирования : если он остановил ваш сервер, просто поместите вашу команду (node server.js > mylog &) в файл, например: server.sh, затем вместо запуска node server.js > mylog & выполните: bash server.sh > mylog & ], а затем запустите less -f mylog.

0
ответ дан 18 April 2017 в 11:57

Другие вопросы по тегам:

Похожие вопросы: