我正在运行服务器,并且该服务器的日志已登录到终端,而不是任何文件中。我想减少查看该日志的次数。
node server.js | less
当我只想查看日志时,请使用Shift+ F来结束文件并继续查看日志。当我想停止它时,我使用CTRL+ C。
不幸的是,这也会停止服务器。我只想停止监视日志结尾而不停止服务器。
这该怎么做?
我正在运行服务器,并且该服务器的日志已登录到终端,而不是任何文件中。我想减少查看该日志的次数。
node server.js | less
当我只想查看日志时,请使用Shift+ F来结束文件并继续查看日志。当我想停止它时,我使用CTRL+ C。
不幸的是,这也会停止服务器。我只想停止监视日志结尾而不停止服务器。
这该怎么做?
Answers:
看来通常不应该退出“ Forever forever”模式,这是手册man less在按Shift+ 时命名输入模式的方式F。
但是,我发现了一个小技巧,无论如何您都可以恢复正常。不过,它会暂时冻结命令,因此我不确定它是否适合您的服务器,该服务器可能不会中断运行。
无论如何,这是窍门:
我认为您已经开始node server.js | less尝试并按Shift+ F进入“永远转发”模式。现在less不再对任何按键作出反应。
在这种状态下,您可以按Ctrl+ C杀死服务器进程,然后可以less通过按退出Q(但是由于某种原因,该命令会将命令保留为作业列表中的已停止进程-您必须运行fg以继续进行并使其完全运行然后终止),但这不是我们想要的。
相反,您也可以按Ctrl+ Z停止(“冻结”)命令并返回到您的shell提示符。现在快速输入shell命令fg(“ ˚F矿摹轮”),以便让命令继续在前台运行。请注意,您的node服务器进程也将在这短时间内暂停,因此您必须考虑这是否可以接受。
所以现在less又像以前一样在前台运行,对吗?是的,但不可思议的是,它不再处于“永远转发”模式。您可以再次使用例如箭头键上下滚动。
不幸的是,less似乎已经完全停止更新其缓冲区,您只能向下滚动到更早冻结命令的行,而不能进一步冻结。该node服务器仍在运行并产生输出虽然,我们只是要得到less再次刷新。
我发现最简单的方法是打开less“帮助”屏幕,然后按键H并Q依次关闭它。现在一切似乎又恢复正常了。
但是,最干净的解决方案可能是遵循terdon的回答,然后将输出重定向到临时文件,less用于监视文件。
%而不是fg; 我发现输入起来比较容易/快捷。而且似乎F(shift-f)仍然可以工作,即使没有做这hq招。真好!现在,当我关注日志时,我可以ctrl-z % Enter做些少做的事情,然后点击即可返回关注F!
less's follows'时。可以同时在多个终端上使用。
TSTP信号中断了正在等待新数据到达的读取系统调用。less接收0字节并得出输出已结束的结论。为避免暂停服务器,请打开一个新的终端窗口。执行ps并标识流程的流程ID less;然后输入kill -TSTP <PID>; kill -CONT <PID>。这样,信号应该在不打扰的情况下背靠背传递。
kill,则可以只发送SIGINT。然后,您无需发送CONT,而less只是在等您。
如您的问题所述:
该服务器已登录终端,而不是任何文件。
我假设您不想使用(临时)日志文件,也许您的日志很大,或者出于任何原因。
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 &run:,bash server.sh > mylog &然后运行less -f mylog。
logrotate。
less并返回shell提示,并使node服务器在后台运行,还是只想less回到正常的非跟随模式,即您可以滚动查看日志而不是观看最新的行?