Çıktı üreten komutu etkilemeden çıktıyı daha az takip etmeyi nasıl durdurabilirim?


12

Bir sunucu çalıştırıyorum ve bu sunucunun günlüğü herhangi bir dosyada değil, terminal giriş alır. Bu günlüğü görüntülemek için daha az kullanmak istiyorum.

node server.js | less

Sadece günlüğü görmek istediğimde , dosyanın sonuna gelmek ve günlükleri izlemeye devam etmek için Shift+ tuşuna basın F. Durdurmak istediğimde CTRL+ kullanıyorum C.

Ne yazık ki, bu sunucuyu da durdurur. Sunucuyu durdurmadan günlüğün sonunu izlemeyi bırakmak istiyorum.

Bu nasıl yapılır?


1
Çıkmak lessve nodesunucu arka planda çalışırken kabuk isteminize geri dönmek mi istiyorsunuz yoksa sadece lessen son satırları izlemek yerine günlükte gezinebileceğiniz normal olmayan takip moduna geri dönmek mi istiyorsunuz?
Byte Komutanı

CTRL + C tuşlarına bastığımda @ByteCommander. sunucumun çalışmaya devam etmesini istiyorum ve daha az normal aşağıdaki moda geri dönüyorum.
Ajay Kumar

Yanıtlar:


17

Ben çıkarken herhangi bir şekilde bulamıyor Fmodunda less, bu nedenle geçici bir çözüm kullanmak gerekir. Örneğin, çıktıyı bir tmp dosyasına kaydedin ve bunun yerine bu tmp dosyasını izleyin:

node server.js > tmpfile & less tmpfile

&Yapar node.jsarka planda çalışır komutu. Bu, less tmpfilehemen başlayacağı ve tmpfile'ı izleyeceği anlamına gelir .

Bir kez girdiğinizde, takip moduna girmek için lesstuşuna basabilirsiniz Fancak şimdi Ctrl+ Csunucuyu öldürmeyecek, sadece takip etmeyi durduracaktır. Artık istediğiniz gibi gezinebilir ve Fdevam etmek için vurabilirsiniz .


13

Normalde "Sonsuza kadar ileri git" modundan çıkmanız gerekmiyor gibi görünüyor, bu da manuelde + man lesstuşuna basarken girdiğiniz modu nasıl adlandırıyor .ShiftF

Ancak, nasıl normale dönebilirim biraz kirli bir hile buldum. Kısaca komutu dondurur, bu yüzden muhtemelen kesintisiz çalışması gereken sunucunuz için uygun olup olmadığından emin değilim.


Her neyse, işte püf noktası:

node server.js | lessAlredy'yi başlattığınızı ve "Sonsuza kadar ilet" moduna girmek için Shift+ düğmesine bastığınızı varsayıyorum F. Artık lessherhangi bir tuşa basmaya tepki vermiyor.

Bu durumda, sunucu işlemini öldürmek için Ctrl+ tuşuna basabilir Cve lessdaha sonra düğmesine basarak çıkabilirsiniz Q(ancak bir nedenle komutu iş listenizde durdurulmuş işlem olarak bırakır - fgdevam etmek ve tamamen izin vermek için çalıştırmanız gerekir. sonra sona erdirir), ama istediğimiz bu değil .

Bunun yerine, komutu durdurmak ("dondurmak") ve kabuk isteminize geri dönmek için Ctrl+ tuşuna da basabilirsiniz Z. Şimdi komutun ön planda çalışmaya devam etmesine izin vermek için shell komutunu fg(" f ore g round") hızlıca yazın . Senin o Not nodesunucu süreci de bu kısa süre içinde duraklatıldıysa, bu kabul edilebilir olup olmadığını düşünmek zorundayız.

Şimdi lesseskisi gibi ön planda koşuyor, değil mi? Evet, ama sihirli bir şekilde artık "Sonsuza kadar ilet" modunda değil. Yukarı ve aşağı kaydırmak için örneğin ok tuşlarını tekrar kullanabilirsiniz.

Ne yazık ki, lessarabelleğini tamamen güncellemeyi bırakmış gibi görünüyor, sadece komutu daha önce dondurduğunuz çizgiye ilerleyebilirsiniz, daha fazla değil. nodeSunucu hala çalışıyor ve biz sadece almak zorunda da çıktı üretiyor lesstekrar yenilemek için.

Bunu yapmanın en kolay yolu less, tuşlara Hve Qsırayla basarak yardım ekranını açmak ve tekrar kapatmak . Şimdi her şey tekrar iyi çalışıyor gibi görünüyor.


Ancak en temiz çözüm terdon'un cevabını takip etmek ve çıktıyı dosyayı lessizlemek için kullanarak geçici bir dosyaya yönlendirmektir .


Oldukça parlak bir kirli kesmek.
TRiG

Bence bu cevabı kabul edilene tercih ediyorum. Bunun %yerine çalıştırabileceğinizi unutmayın fg; Yazmayı daha kolay / hızlı buluyorum. Ayrıca, F(shift-f) hqhile yapmadan bile hala çalışıyor gibi görünüyor . Güzel! Şimdi günlükleri takip ederken ctrl-z % Enter, daha az şeyi yapabilirim, sonra vurarak tekrar geri dönebilirim F!
JoL

BTW, kirli dememelisin. Şahsen, bu kullanım isteyebilirsiniz, özellikle, burada, sen çöp için (kaldırmak sonra isim düşünmek ve sahip olduğunuz) geçici dosyaları ile dosya sistemi yok gibi diğer çözümlere göre daha temiz görünüyor lesslar takip' özelliği aynı anda birden fazla terminalde.
JoL

2
Kaynağa bakmadım, ancak bu muhtemelen işe yarar çünkü TSTPsinyal yeni verilerin gelmesini bekleyen okuma sistemi çağrısını kesintiye uğratır; less0 bayt alır ve çıktının sona erdiği sonucuna varır. Sunucuyu duraklatmaktan kaçınmak için yeni bir terminal penceresi açın; pssürecin süreç kimliğini yürütmek ve tanımlamak less; sonra yazın kill -TSTP <PID>; kill -CONT <PID>. Bu şekilde, sinyalleri yazarken gecikmeden arka arkaya iletilmelidir.
alexis

@alexis kullanacaksanız kill, bunun yerine SIGINT'i gönderebilirsiniz. O zaman göndermeniz gerekmeyecek CONTve lesssadece sizi bekliyor.
muru

3

Sorunuzun söylediği gibi:

Bu sunucu herhangi bir dosyada değil, terminalde oturum açar.

Bir (temp) günlük dosyası kullanmak istemediğinizi varsayalım, belki günlüğünüz çok büyük veya herhangi bir nedenle.


Adlandırılmış kanal, fifodosya.

Ben geldi dosya named pipe fileolarak da bilinen bir fifodosya, bu dosya sadece günlükleri daha az boru için kullanılacak ve hiçbir şey kaydedilecektir.

İlk önce aşağıdakileri oluşturun fifo file:

mkfifo mylog

Sunucunuzu çalıştırın ve günlükleri şu dosyaya yönlendirin:

node server.js > mylog &

Günlüklerinizi okumak için daha az kullanın (-f bu özel dosyayı okumaya daha az zorlar):

less -f mylog

Şimdi takip etmek için shift+ tuşunu Fve takip işlemini durdurmak için CTRL+ tuşunu kullanabilirsiniz C, ancak sunucu hala çalışıyor, çıktıyı shift+ ile tekrar takip edebilirsiniz F.


Yedekleme planı : Sunucunuzu durdurduysa, komutunuzu ( node server.js > mylog &) bir dosyaya koyun : örneğin: run: server.shyerine node server.js > mylog &: bash server.sh > mylog &ve çalıştırın less -f mylog.


Burada normal bir dosya yerine fifo kullanmanın anlamı nedir? Görebildiğim tek fayda, disk alanından tasarruf etmektir, ancak bunun böyle bir şeyle alakalı olacağından şüpheliyim. İşiniz bittikten sonra el ile silmeniz gereken bir dosyaya sahip olursunuz.
terdon

2
Burada FIFO'ya karşı öneriyorum çünkü kimse (daha fazla) günlük verisi istemediğinde FIFO arabellek dolu çalışırsa sunucu işlemi durabilir. Günlük dosyası boyutu bir sorun haline gelirse, gerçekten uygun bir günlük dosyası artı kullanmalısınız logrotate.
David Foerster

@terdon Tek noktanın diski kaydettiğini söylediğin gibi, OP'nin günlüklerinin diske kaydedilmesini istemediğini düşündüm.
Ravexina

@DavidFoerster +1 İyi Puan;)
Ravexina
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.