Я работаю на сервере, и журнал этого сервера регистрируется в терминале, а не в каком-либо файле. Я хотел бы использовать меньше, чтобы просмотреть этот журнал.
node server.js | less
Когда я просто хочу посмотреть журнал, я нажимаю Shift+, Fчтобы добраться до конца файла и продолжаю смотреть журналы. Когда я хочу остановить это, я использую CTRL+ C.
К сожалению, это также останавливает сервер. Я просто хочу перестать смотреть конец журнала, не останавливая сервер.
Как это сделать?
command-line
pipe
less
Аджай Кумар
источник
источник
less
и вернуться к приглашению оболочки сnode
сервером, работающим в фоновом режиме, или вы просто хотитеless
вернуться в нормальный режим без подписки, где вы можете просматривать журнал вместо просмотра последних строк?Ответы:
Я не могу найти способ выхода из
F
режимаless
, поэтому вам придется использовать обходной путь. Например, сохраните вывод в файл tmp, а затем просмотрите этот файл tmp:Команда
&
заставляетnode.js
команду работать в фоновом режиме. Это означает, чтоless tmpfile
начнется немедленно и будет отслеживать tmpfile.После входа
less
вы можете нажать, Fчтобы войти в режим следования, но теперь Ctrl+ Cне убьет сервер, а только остановит следование. Теперь вы можете прокручивать, как хотите, и можете нажать, Fчтобы продолжить.источник
Кажется, что вы обычно не должны выходить из режима «Вперед навсегда», как руководство
man less
называет режим, в который вы входите, нажимая Shift+ F.Тем не менее, я нашел маленький подвох, как вы все равно можете вернуться к нормальной жизни. Это ненадолго остановит команду, поэтому я не уверен, что она подойдет для вашего сервера, который, вероятно, должен работать бесперебойно.
Во всяком случае, вот фокус:
Я предполагаю, что вы запустили
node server.js | less
alredy и нажали Shift+, Fчтобы войти в режим «Вперед навсегда». Теперьless
не реагирует ни на какие нажатия клавиш.В этом состоянии вы можете нажать Ctrl+, Cчтобы убить процесс сервера, и
less
затем выйти из него, нажав Q(что, однако, по какой-то причине оставит команду как остановленный процесс в вашем списке заданий - вам нужно запустить ее,fg
чтобы продолжить и полностью ее завершить). прекратить потом), но это не то, что мы хотим.Вместо этого вы также можете нажать Ctrl+, Zчтобы остановить («заморозить») команду и вернуться в командную строку. Теперь быстро наберите команду shell
fg
(« f ore g round»), чтобы команда продолжала работать на переднем плане. Обратите внимание, что вашnode
серверный процесс также приостанавливается на это короткое время, вы должны решить, является ли это приемлемым или нет.Так что теперь
less
снова на переднем плане, как и раньше, верно? Да, но волшебным образом он больше не находится в режиме «Вперед навсегда». Вы можете снова использовать, например, клавиши со стрелками для прокрутки вверх и вниз.К сожалению,
less
похоже, что он полностью перестал обновлять свой буфер, вы можете прокрутить вниз только до строки, в которой вы ранее заморозили команду, а не дальше.node
Сервер все еще работает и производит вывод , однако, мы просто должны получить ,less
чтобы снова обновить.Самый простой способ я нашел , чтобы сделать это, чтобы просто открыть
less
'помощи экрана и закройте его снова, нажав клавиши Hи Qпоследовательно. Теперь все, кажется, снова работает нормально.Однако самое чистое решение, вероятно, состоит в том, чтобы следовать ответу Тердона и перенаправить вывод во временный файл, используя
less
для мониторинга файл.источник
%
а неfg
; Мне легче / быстрее набирать текст. Также кажется, чтоF
(shift-f) все еще работает, даже не делаяhq
трюк. Приятно! Теперь, когда я слежу за журналами, я могуctrl-z
%
Enter
сделать меньше, а затем вернуться к подписке, нажавF
!less
«s наблюдение функция в нескольких терминалах одновременно.TSTP
сигнал прерывает системный вызов чтения, который ожидал поступления новых данных;less
получает 0 байтов и приходит к выводу, что вывод завершен. Чтобы не останавливать сервер, откройте новое окно терминала; выполнитьps
и идентифицировать идентификаторless
процесса; затем введитеkill -TSTP <PID>; kill -CONT <PID>
. Таким образом, сигналы должны доставляться спина к спине, без задержки, пока вы печатаете.kill
, вы можете просто вместо этого отправить SIGINT. Тогда вам не нужно будет отправлятьCONT
, аless
просто ждет вас.Как ваш вопрос говорит:
Я предполагаю, что вы не хотите использовать (временный) файл журнала, возможно, ваш журнал огромен или по какой-либо причине у вас есть.
Именованный канал,
fifo
файл.Я придумал использовать
named pipe file
также известный какfifo
файл, этот файл будет использоваться только для передачи ваших журналов к меньшему количеству, и на нем ничего не будет сохранено.Сначала создайте
fifo file
:Запустите ваш сервер и перенаправьте журналы в этот файл:
Используйте меньше, чтобы читать ваши журналы (-f заставляет меньше читать этот специальный файл):
Теперь вы можете использовать shift+, Fчтобы следовать, и CTRL+, Cчтобы остановить следование, но сервер все еще работает, вы можете следить за выводом снова с shift+ F.
План резервного копирования : Если он остановил ваш сервер, просто поместите вашу команду (
node server.js > mylog &
) в файл, например:,server.sh
затем вместо запускаnode server.js > mylog &
run:bash server.sh > mylog &
и затем запуститеless -f mylog
.источник
logrotate
.