我正在运行一个服务器,该服务器的日志记录在终端中,而不是任何文件中。我想使用 less 查看此日志。
node server.js | less
当我只想查看日志时,我会按Shift+F转到文件末尾并继续查看日志。当我想停止时,我会使用CTRL+ C。
不幸的是,这也会停止服务器。我只是想停止查看日志的结尾而不停止服务器。
这个怎么做?
答案1
我找不到退出该F
模式的任何方法less
,因此您必须使用变通方法。例如,将输出保存到 tmp 文件,然后改为查看该 tmp 文件:
node server.js > tmpfile & less tmpfile
使&
命令node.js
在后台运行。这意味着less tmpfile
将立即启动并跟踪临时文件。
进入后less
,您可以按F进入跟随模式,但现在Ctrl+C不会终止服务器,它只会停止跟随。您现在可以随意滚动,并可以按F恢复跟随。
答案2
似乎您通常不应该退出“永远前进”模式,这是手册对按+man less
时进入的模式的命名。ShiftF
但是,我发现了一个可以让你恢复正常的小技巧。不过,它会短暂地冻结命令,所以我不确定它是否适合你的服务器,因为你的服务器可能应该不间断地运行。
无论如何,这里有一个窍门:
我假设您已启动node server.js | less
并按下Shift+F进入“永久前进”模式。现在less
不再对任何按键做出反应。
在这种状态下,您可以按Ctrl+C来终止服务器进程,然后less
按退出Q(但由于某种原因,这会将命令保留为作业列表中的停止进程 - 您必须运行fg
才能继续执行并让其完全终止),但这是不是我们想要的。
相反,您也可以按Ctrl+Z来停止(“冻结”)命令并返回到 shell 提示符。现在快速输入 shell 命令fg
(“F矿石G您可以使用以下命令运行该命令: 1. 单击“循环”按钮,让命令继续在前台运行。请注意,您的node
服务器进程也会在这短暂的时间内暂停,您必须考虑这是否可以接受。
那么现在less
又像以前一样在前台运行了,对吗?是的,但神奇的是,它不再处于“永远前进”模式。您可以再次使用箭头键来上下滚动。
不幸的是,less
似乎已完全停止更新其缓冲区,您只能向下滚动到之前冻结命令的那一行,而不能再往前滚动。node
不过,服务器仍在运行并产生输出,我们只需less
再次刷新即可。
我发现最简单的方法是打开“帮助屏幕”并再次关闭它,方法是依次按下和less
键。现在一切似乎又正常工作了。HQ
然而,最干净的解决方案可能是terdon 的回答并将输出重定向到临时文件,用于less
监视该文件。
答案3
正如你的问题所说:
该服务器登录在终端,而不是任何文件中。
我假设您不想使用(临时)日志文件,也许您的日志太大或者出于其他原因。
命名管道,fifo
文件。
我想到的是使用一个named pipe file
也称为fifo
文件的文件,这个文件仅用于将您的日志传输到 less,并且不会保存任何内容。
首先创建一个fifo file
:
mkfifo mylog
运行您的服务器并将日志重定向到此文件:
node server.js > mylog &
使用 less 读取你的日志(-f 强制 less 读取这个特殊文件):
less -f mylog
现在您可以使用shift+F来跟踪,使用CTRL+来停止跟踪,但服务器仍在运行,您可以再次使用+C来跟踪输出。shiftF
后备方案:如果它停止了你的服务器,只需把你的命令(node server.js > mylog &
)放入一个文件中,例如:server.sh
,然后而不是运行node server.js > mylog &
运行:bash server.sh > mylog &
然后运行less -f mylog
。