Pracowałem kiedyś dla firmy, która miała dostosowaną powłokę do zarządzania jednym z ich produktów, która działała w systemie Linux, i chcę replikować kluczową funkcję tej powłoki.
Całą pracę wykonano w tle, a dane wyjściowe z dziennika są wyświetlane wszystkim podłączonym użytkownikom.
Dziennik ogoniłby cię w tle do twojej skorupy, a wiersz zachęty zawsze pozostawałby idealnie na dole.
Na przykład
Log line 1
Log line 2
Log line 3
![ROOT@PRODUCT51-LIVE]:~/ #
Próbowałem to zrobić za pomocą basha, aby uruchomić odłączony ogon w pliku .bashrc użytkownika, ale kiedy dane wyjściowe polecenia są wysyłane do standardowego wejścia - pojawia się ono pod pytaniem bash, np.
![ROOT@PRODUCT51-LIVE]:~/ #Log line 1
Log line 2
Log line 3
A użytkownik musiałby nacisnąć Enter lub CtrlCuzyskać czysty wiersz zachęty.
Nie mam pomysłów, jak sprawić, by monit zawsze przeskakiwał na dół wyników i myślę, że używam złej terminologii, aby znaleźć coś w Google, ponieważ nie mam szczęścia - czy ktoś wie, jak to zrobić z uderzeniem?
tail -f
wyjściowymi i monitem oraz danymi wyjściowymi polecenia po wprowadzeniu polecenia, które ma znaczną ilość danych wyjściowych, szczególnie gdy proces w tle aktywnie wysyła dane wyjściowe?Odpowiedzi:
Następujące czynności wykonuje to, czego potrzebujesz, bez korzystania z Tmux, ekranu lub innych programów. Utrzymuje monit na dole. Zamień „/ var / log / cron” na dowolny potrzebny plik:
kluczem do tego są znaki kontrolne ANSI dla terminala. W szczególności instrukcja „\ e [x; y”, która ustanawia nowy obszar przewijalny. Tak więc, gdy każdy wiersz pliku dziennika jest odczytywany, dolna linia w oknie jest wykluczana z przewijalnego obszaru, linia z pliku dziennika jest wstawiana, a następnie dolna część jest ponownie dodawana.
źródło
Odpowiedź brzmi screen lub tmux został użyty
Wyjaśnię, jak możesz skonfigurować takie za pomocą screena
1) Zainstaluj ekran przy użyciu programów pochodnych
apt-get install screen
Ubuntu / Debian lubyum install screen
RedHat.2)
screen -S shell_and_logs
3) Następnie naciśnij Ctrl+ a, a następnie
S
(wielkie S).Pojawi się poziomy ekran
4) Naciśnij Ctrl+, aa następnie TAB
To spowoduje przejście do drugiego okna podziału.
5) Utwórz tutaj kolejne okno, aby uzyskać wiersz polecenia, naciskając Ctrl+ azwolnij klawisze, a następnie naciśnij
c
6) Możesz zmienić rozmiar drugiego windo, naciskając Ctrl+, aa następnie wpisując,
:resize
po czymLines:
pojawi się. Wprowadź liczbę linii, które chcesz wyświetlić.7) Wreszcie możesz przełączać się między oknami za pomocą Ctrl+, aa następnieTAB
źródło
tail -F /var/log/messages &
to inny sposób pokazywania wiadomości, gdy coś się zmienia, na przykład w przypadku wykrycia błędu logowania lub problemów z pewną usługą. Nie jest to jednak idealne, ponieważ zepsuje interaktywną powłokę.screen
itmux
że może to zrobić - na przykład niektóre z BSD dostarczany zwindow
poleceniem. Biorąc pod uwagę wybór, poleciłbym to rozwiązanie w stosunku do niestandardowej powłoki lub innych dostępnych opcji ze względu na jej elastyczność. Może nie być tak przejrzysty dla użytkownika końcowego, ale tak naprawdę nie znają różnicy, a zaawansowani użytkownicy / sysadmini będą mogli skorzystać z dodatkowej elastyczności oferowanej przezscreen
.t=$(mktemp); printf '%s\n' 'screen tail -F /var/log/messages' split focus screen > "$t"; screen -S screenname -c "$t"
Umieść go w skrypcie i uruchom go za każdym razem, gdy chcesz. Dzięki geirha za to na #bash @ irc.freenode.org