Çıkışın Altında Bash İstemi - Arka Plan Günlük Kuyruğu


15

Linux'ta çalışan ürünlerinden birinin yönetimi için özelleştirilmiş bir kabuğu olan bir şirkette çalışıyordum ve bu kabuğun önemli bir özelliğini çoğaltmak istiyorum.

Tüm işler bir arka plan işlemi tarafından yapıldı ve günlükten alınan tüm bağlı kullanıcılara çıktı.

Günlük, kabuğunuzun arka planında kuyruk oluşturur ve bilgi istemi satırı her zaman en altta kalır.

Örneğin;

Log line 1
Log line 2
Log line 3
![ROOT@PRODUCT51-LIVE]:~/ #

Bunu bash ile yapmaya çalıştığım yol, kullanıcıların .bashrc dosyasında ayrı bir kuyruk başlatmaktı, ancak komuttan çıktı stdout'a gönderildiğinde - bash isteminin altına gelir, örn.

![ROOT@PRODUCT51-LIVE]:~/ #Log line 1
Log line 2
Log line 3

Ve kullanıcının CtrlCtemiz bir bilgi istemi satırı için enter veya tuşuna basması gerekir .

İstemi her zaman çıktının altına atlamak için nasıl bir fikrim yok ve sanırım şansım olmadığı için Google'da bir şey bulmak için yanlış terminolojiyi kullanıyorum - herkes bunu nasıl yapacağını biliyor mu? bash ile?


1
Çıktının anında veya yeni bir istem aldığınızda güncellenmesini mi istiyorsunuz?
ahilsend

Anında, bu yüzden sadece "tail -f" çalıştırmak mümkün olduğunca aynı, ancak alt istemi ile.
iamacarpet

Ne olur tail -fsen çıktının önemli miktarda bir komut girerken arka plan işlemi aktif olarak çıkışını gönderdiğini özellikle, çıkış ve hızlı ve komut çıktısı?
sonraki duyuruya kadar duraklatıldı.

Onların durumunda, çalıştırılacak komutlar, kendi başına değil, yalnızca arka plan işlemi yoluyla çıktıya neden oldu, bu yüzden bir sorun değildi. Bu durumda, istenen etkiyi veren bir çözüm elde ettiğimizde, çıktının karışmanın uygulamadan uygulamaya temelinde ne kadar kötü olacağını oynamak ve görmek için bir durum olacağını düşünüyorum.
iamacarpet

1
Sonra ekran veya tmux kullanma önerisini şiddetle destekliyorum. Çıktı karışık olmaz veya ekran alanı için savaşmaz ve pencereleri yeniden boyutlandırabilir (bölmeyi taşıyabilir) ve bağımsız olarak kaydırabilirsiniz. İtirazınız üstbilgi / altbilgi / durum satırlarının "ağır" olması durumunda, bunu yapılandırabilme yeteneği vardır. Hiçbir tekerlek yeniden icat edilmedi.
sonraki duyuruya kadar duraklatıldı.

Yanıtlar:


1

Aşağıdakiler, tmux veya screen veya diğer programları kullanmadan ihtiyacınız olanı yapar. İstemi altta tutar. "/ Var / log / cron" yerine istediğiniz dosyayı yazın:

#!/bin/bash 
L=$(tput lines)
L1=${L}
(( L1-- ))
C=$(tput cols)
tput cup ${L} 0
tail -f /var/log/cron | while read line; do 
  tput sc
  printf "\e[1;${L1}r\e[${L1};${C}f" 
  echo; echo ${line}
  printf "\e[1;${L}r" && tput rc
done

bunun anahtarı terminalin ANSI kontrol karakterleri. Özellikle yeni bir kaydırılabilir alan ayarlayan "\ e [x; y" ifadesi. Bu nedenle, günlük dosyasının her satırı okundukça, penceredeki alt satır kaydırılabilir alanın dışında bırakılır, günlük dosyasından satır eklenir, daha sonra alt kısım geri eklenir.


Teşekkürler Michael, bu güzel çalışıyor =] - Günlük satır kaydırma bir sürü varken yazdığınız zaman zaman bir sorun var, konsol satırındaki tüm metni geri alamazsınız (ile test edildi meşgul bir apache günlüğü), ancak ne kullanmak istediğim için bu bir sorun olmamalı.
iamacarpet

@iamacarpet Harika. Senin için işe sevindim.
Michael Martinez

11

Cevap ekran veya tmux kullanılmış

Böyle bir ekranı kullanarak nasıl yapılandırabileceğinizi açıklayacağım

1) apt-get install screenUbuntu / Debian veya yum install screenRedHat türevlerine kullanarak ekranı yükleyin .

2) screen -S shell_and_logs

3) Daha sonra Ctrl+ a, ardından S(büyük S) tuşuna basın .
Yatay bir ekran görünecektir

4) Ctrl+ tuşlarına ve aardından TAB
Bu, ikinci bölünmüş pencereye atlayacaktır.

5) Burada başka bir pencere oluşturun, böylece Ctrl+ atuşlarına basarak ve ardından tuşlara basarak komut istemini alabilirsiniz.c

6) Ctrl+ adüğmesine basarak ve ardından yazdıktan :resizesonra ikinci windo'yu yeniden boyutlandırabilirsiniz Lines:. Göstermek istediğiniz satır sayısını girin.

7) Son olarak Ctrl+ ve aardından pencereler arasında geçiş yapabilirsiniz .TAB

Aşağıdaki örneğe bakın


Teşekkürler val0x00ff - Fikri beğendim, işi hallediyor - ancak söz konusu sistemin sağladığı deneyim kadar temiz görünmüyor. Deneyimsiz bir kullanıcı için, bu kadar şeffaf değil - açıkçası, ana kabuğunuzun sizi güncel tutması gibi hissetmekten ziyade başka bir kabuk.
iamacarpet

@iamacarpet tail -F /var/log/messages &Örneğin bir oturum açma hatası bulunduğunda veya bazı hizmetlerde sorun olduğunda bir şey değiştiğinde size mesaj göstermenin başka bir yoludur. Ancak bu ideal değildir çünkü interaktif kabuğunuzu bozacaktır.
Valentin Bajrami

Evet, tam da bunu sordum - etkileşimli kabuğu bozmadan bunu yapmanın bir yolu - şirketlerin kabuğunda yapmayı başardıkları gibi - ama sıfırdan bir kabuk yazmak zorunda kalmamak güzel olurdu başarmak için.
iamacarpet

1
@iamacarpet Bunun dışında bir sürü başka araç var screenve tmuxbunu yapabilir - örneğin bazı BSD'ler bir windowkomutla gönderilir. Seçim göz önüne alındığında, bu çözümü özel bir kabuk veya esnekliği nedeniyle mevcut diğer seçenekler üzerinde tavsiye ederim. Son kullanıcı için şeffaf olmayabilir, ancak farkı gerçekten bilmeyecekler ve güç kullanıcıları / sistem yöneticileri tarafından sunulan ekstra esnekliği kullanabilecektir screen.
voretaq7

@iamacarpet t=$(mktemp); printf '%s\n' 'screen tail -F /var/log/messages' split focus screen > "$t"; screen -S screenname -c "$t"Bir betiğe koyun ve her seferinde çalıştırın. Bunun için geirha'ya #bash @ irc.freenode.org adresinden teşekkürler
Valentin Bajrami
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.