我正在运行服务器,并且该服务器的日志已登录到终端,而不是任何文件中。我想减少查看该日志的次数。
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
回到正常的非跟随模式,即您可以滚动查看日志而不是观看最新的行?