Làm thế nào tôi có thể dừng theo dõi đầu ra ít hơn, mà không ảnh hưởng đến lệnh tạo đầu ra?


11

Tôi đang chạy một máy chủ và nhật ký của máy chủ này được đăng nhập vào terminal, không phải trong bất kỳ tập tin nào. Tôi muốn sử dụng ít hơn để xem nhật ký này.

node server.js | less

Khi tôi chỉ muốn xem nhật ký, tôi sử dụng nhấn Shift+ Fđể đến cuối tệp và tiếp tục xem nhật ký. Khi tôi muốn dừng nó, tôi sử dụng CTRL+ C.

Thật không may, điều này cũng dừng máy chủ. Tôi chỉ muốn dừng xem hết nhật ký mà không dừng máy chủ.

làm như thế nào?


1
Bạn có muốn thoát lessvà quay lại dấu nhắc shell của mình với nodemáy chủ đang chạy ở chế độ nền hay bạn chỉ muốn lessquay lại chế độ không theo dõi thông thường nơi bạn có thể cuộn qua nhật ký thay vì xem các dòng mới nhất?
Chỉ huy Byte

@ByteCommander khi tôi nhấn CTRL + C. tôi muốn máy chủ của mình tiếp tục chạy và tôi muốn quay lại chế độ không theo dõi bình thường hơn, nơi tôi có thể cuộn.
Ajay Kumar

Câu trả lời:


16

Tôi không thể tìm thấy bất kỳ cách nào thoát khỏi Fchế độ less, vì vậy bạn sẽ phải sử dụng một cách giải quyết. Ví dụ: lưu đầu ra vào tệp tmp và sau đó xem tmpfile đó:

node server.js > tmpfile & less tmpfile

Lệnh &làm cho node.jschạy trong nền. Điều này có nghĩa là less tmpfilesẽ bắt đầu ngay lập tức và sẽ theo dõi tmpfile.

Sau khi vào less, bạn có thể nhấn Fđể vào chế độ theo dõi nhưng bây giờ Ctrl+ Csẽ không giết máy chủ, nó sẽ chỉ dừng theo dõi. Bây giờ bạn có thể cuộn xung quanh như bạn muốn và có thể nhấn Fđể tiếp tục theo dõi.


13

Có vẻ như bạn thường không được phép thoát khỏi chế độ "Chuyển tiếp mãi mãi", đó là cách thủ công man lessđặt tên cho chế độ bạn nhập khi nhấn Shift+ F.

Tuy nhiên, tôi đã tìm thấy một mẹo nhỏ bẩn thỉu làm thế nào bạn có thể trở lại bình thường. Tuy nhiên, nó sẽ đóng băng lệnh một cách nhanh chóng, vì vậy tôi không chắc liệu nó có phù hợp với máy chủ của bạn hay không, có lẽ nên chạy liên tục.


Dù sao, đây là mẹo:

Tôi giả sử rằng bạn đã bắt đầu tiết node server.js | lesskiệm và nhấn Shift+ Fđể vào chế độ "Chuyển tiếp mãi mãi". Bây giờ lesskhông phản ứng với bất kỳ nhấn phím nữa.

Ở trạng thái này, bạn có thể nhấn Ctrl+ Cđể hủy tiến trình máy chủ và có thể thoát lesssau đó bằng cách nhấn Q(tuy nhiên vì lý do nào đó sẽ để lệnh dừng quá trình trong danh sách công việc của bạn - bạn phải chạy fgđể tiếp tục và để nó hoàn toàn chấm dứt sau đó), nhưng đây không phải là điều chúng ta muốn.

Thay vào đó, bạn cũng có thể nhấn Ctrl+ Zđể dừng ("đóng băng") lệnh và quay lại dấu nhắc shell của bạn. Bây giờ nhanh chóng gõ lệnh shell fg(" f ore g round") để lệnh tiếp tục chạy ở nền trước. Lưu ý rằng nodequá trình máy chủ của bạn cũng bị tạm dừng trong thời gian ngắn này, bạn phải xem xét liệu điều này có được chấp nhận hay không.

Vì vậy, bây giờ lessđang chạy trong foreground một lần nữa như trước, phải không? Có, nhưng kỳ diệu là nó không còn ở chế độ "Chuyển tiếp mãi mãi". Bạn có thể sử dụng ví dụ các phím mũi tên một lần nữa để cuộn lên xuống.

Thật không may, lessdường như đã ngừng cập nhật bộ đệm của nó hoàn toàn, bạn chỉ có thể cuộn xuống dòng mà bạn đã đóng băng lệnh trước đó, không thể tiếp tục. Tuy nhiên, nodemáy chủ vẫn đang chạy và tạo đầu ra, chúng ta chỉ cần lesslàm mới lại.

Cách dễ nhất tôi tìm thấy để làm điều đó là chỉ cần mở less'màn hình trợ giúp và đóng lại, bằng cách nhấn các phím HQtuần tự. Bây giờ mọi thứ dường như đang hoạt động tốt trở lại.


Tuy nhiên, giải pháp sạch nhất có lẽ là theo câu trả lời của terdon và chuyển hướng đầu ra sang tệp tạm thời, sử dụng lessđể giám sát tệp.


Một hack bẩn khá rực rỡ.
TRiG

Tôi nghĩ rằng tôi thích câu trả lời này cho câu trả lời được chấp nhận. Lưu ý rằng bạn có thể chạy %chứ không phải fg; Tôi thấy nó dễ dàng hơn / nhanh hơn để gõ. Ngoài ra, có vẻ như F(shift-f) vẫn hoạt động ngay cả khi không thực hiện hqthủ thuật. Đẹp! Bây giờ khi tôi đang theo dõi nhật ký, tôi có thể ctrl-z % Enter, làm ít việc của mình hơn, sau đó quay lại theo dõi bằng cách nhấn F!
JoL

BTW, bạn không nên gọi nó là bẩn. Cá nhân, điều này có vẻ sạch hơn các giải pháp khác vì ở đây, bạn không phải xả rác hệ thống tệp của mình bằng các tệp tạm thời (mà bạn phải nghĩ ra tên rồi xóa), đặc biệt là khi bạn có thể muốn sử dụng lesstheo dõi tính năng trong nhiều thiết bị đầu cuối cùng một lúc.
JoL

2
Tôi đã không tìm trong nguồn, nhưng điều này có thể hoạt động vì TSTPtín hiệu làm gián đoạn cuộc gọi hệ thống đọc đang chờ dữ liệu mới đến; lessnhận 0 byte và kết luận rằng đầu ra đã kết thúc. Để tránh tạm dừng máy chủ, hãy mở một cửa sổ terminal mới; thực hiện psvà xác định id quá trình của lessquá trình; sau đó gõ kill -TSTP <PID>; kill -CONT <PID>. Bằng cách này, các tín hiệu sẽ được gửi trở lại trở lại, không chậm trễ trong khi bạn đang gõ.
alexis

@alexis nếu bạn sẽ sử dụng kill, bạn chỉ có thể gửi SIGINT thay thế. Sau đó, bạn sẽ không cần phải gửi CONT, và lesschỉ chờ đợi bạn.
muru

3

Như câu hỏi của bạn nói:

Máy chủ này được đăng nhập vào thiết bị đầu cuối, không phải trong bất kỳ tập tin.

Tôi giả sử rằng bạn không muốn sử dụng tệp nhật ký (temp), có thể nhật ký của bạn rất lớn hoặc vì bất kỳ lý do gì bạn có.


Đặt tên ống, fifotập tin.

Những gì tôi nghĩ ra là sử dụng một tệp named pipe filecòn được gọi là fifotệp, tệp này sẽ chỉ được sử dụng để chuyển các bản ghi của bạn xuống ít hơn và sẽ không có gì được lưu trên đó.

Đầu tiên tạo một fifo file:

mkfifo mylog

Chạy máy chủ của bạn và chuyển hướng các bản ghi đến tệp này:

node server.js > mylog &

Sử dụng ít hơn để đọc nhật ký của bạn (-f buộc ít hơn để đọc tệp đặc biệt này):

less -f mylog

Bây giờ bạn có thể sử dụng shift+ Fđể theo dõi và CTRL+ Cđể dừng theo dõi, nhưng máy chủ vẫn đang chạy, bạn có thể theo dõi lại đầu ra với shift+ F.


Gói sao lưu : Nếu nó dừng máy chủ của bạn, chỉ cần đặt lệnh ( node server.js > mylog &) của bạn vào một tệp, ví dụ : server.sh, sau đó thay vì chạy node server.js > mylog &run: bash server.sh > mylog &và sau đó chạy less -f mylog.


Điểm của việc sử dụng fifo thay vì một tệp thông thường ở đây là gì? Lợi ích duy nhất tôi có thể thấy là tiết kiệm dung lượng ổ đĩa nhưng tôi nghi ngờ điều đó sẽ phù hợp với những thứ như thế này. Bạn vẫn sẽ có một tệp ở đó sau khi hoàn thành mà bạn sẽ phải xóa thủ công.
terdon

2
Tôi khuyên bạn nên chống lại một FIFO ở đây vì quy trình máy chủ có thể bị đình trệ nếu bộ đệm FIFO chạy đầy khi không ai yêu cầu (thêm) dữ liệu nhật ký. Nếu kích thước tệp nhật ký trở thành một vấn đề, người ta thực sự nên sử dụng một tệp nhật ký thích hợp cộng logrotate.
David Foerster

@terdon Như bạn đã nói điểm duy nhất là lưu đĩa, tôi nghĩ OP không muốn lưu nhật ký của mình trên đĩa.
Ravexina

@DavidFoerster +1 Điểm tốt;)
Ravexina
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.