Хвіст декількох віддалених файлів


41

Чи є спосіб видалити файли хвоста 2?

У мене є два сервери (a і b) за балансиром навантаження, і я хотів би зробити щось подібне, якщо можливо:

tail -f admin@serverA:~/mylogs/log admin@serverB:~/mylogs/log

Дякую!


Чому ви стерли відповідь?
Пабло Фернандес

здебільшого тому, що це не спрацювало :-)
мат

@mat О, я ось-ось збирався це спробувати :). Спасибі все одно!
Пабло Фернандес

це не працює, тому що конструкція <(foo) буде чекати, коли внутрішня команда закінчиться, перш ніж її замінить труба в початковому командному рядку, з якого програмне забезпечення зможе прочитати, і, хвіст ніколи не закінчиться :-)
мат

Відповіді:


31

Це працювало для мене:

ssh -n user@hostname1 'tail -f /mylogs/log' &
ssh -n user@hostname2 'tail -f /mylogs/log' &

Так, я це роблю, за винятком того, що у мене зазвичай відкрито кілька терміналів gnome, кожен з яких має один сеанс всередині нього
Том О'Коннор,

1
Чи можна це зробити без відкриття декількох незалежних сеансів ssh?
tgies

8
Але це не дозволяє вам зупинити хвостик Ctrl+C.
sorin

@sorin, щоб припинити процеси, просто поверніть кожного на перший план fg; тоді ти можеш ctrl+c. Ви зробите це один раз для кожного хвоста, який ви біжите. Або ви могли pkill -f sshодночасно націлити на них усіх.
Дейл Андерсон

34

Мій кращий варіант - перейти з багатоповерхівкою. Я б запустив щось на кшталт:

multitail -l 'ssh user@host1 "tail -f /some/log/file"' -l 'ssh user@host2 "tail -f /some/log/file"'

1
Дякую! Я шукав приклад того, як використовувати мультитайл через ssh / на віддалених хостах!
Ной Суссман

Multitail - це набагато надійніше рішення.
obfk

на нашому веб-сайті більше 10 веб-вузлів, і багатоповерхова помилка в першій спробі з помилкою Operation not permitted, з 2 3 веб-вузлами, це нормально
Hieu Vo

Я також отримую Operation not permitted, якісь підказки?
Ерік Егнер

7

Ви можете використовувати тканину для хвоста кількох хостів (а також, якщо потрібно, підкреслити результати):

$ fab -P -u 'USER' -p 'PASSWORD' --linewise -H host1,host2,host3 -- tail -f /path/to/my/log.log | grep ERROR

6

Я думав, що це також можливо використовувати:

ssh -f user@hostname1 "tail -f /var/log/file" > /tmp/somefile &
ssh -f user@hostname2 "tail -f /var/log/file" > /tmp/somefile &

Опція -f після ssh дозволяє ввести пароль до запуску у фоновому режимі. Тоді ви можете мати рядкові результати в одному файлі та виконувати:

tail -f /tmp/somefile

Ви дали б трохи більше контролю над поточною командою "хвіст" у випадку, якщо ви хочете використовувати інші варіанти хвоста для відображення виводу.



5

Погляньте на багатоповерхівку . Як і в наведених вище прикладах, ви можете дати це як команду ssh, і тоді ви отримаєте на одному екрані декілька журналів (і буферизацію для легких прокруток). Це також робить забарвлення, що дуже корисно для виявлення аномалій.


2

Parallel ssh має гарне рішення для цього:

pssh -t0 -H 'host-01 host-02 host-03 host-04' -P tail -f /var/log/app.log
  • -t0 вимикає час очікування з'єднання, інакше pssh закрив з'єднання
  • -H '<host>...' це список хостів для запуску команди
  • -P полягає в тому, щоб включити друк stdout кожного хоста
  • tail -f /var/log/app.log може бути будь-яка команда, яку може виконувати ваша віддалена оболонка


1

Просто дивне рішення, але воно працює !:

Екран 1

ssh user@hostname1 "tail -f /var/log/file" > /dev/pts/6

Екран 2

ssh user@hostname2 "tail -f /var/log/file" > /dev/pts/6

це спрацює, виводячи рядки на термінал / dev / pts / 6 (щоб дізнатись власний термінал: Execute: who am i і він вам це покаже.)
Олів'є Дулак

1

Ви можете замовити dbitail.

Я створив інструмент Java, який міг читати локальні та віддалені файли журналів за допомогою SSH. Це досить просто у використанні.

Ще кілька пояснень: https://github.com/pschweitz/DBITail/wiki

Просто завантажте версію, що відповідає вашій операційній системі, з нативної версії випуску jar в режимі Java Runtime (потрібно java 8_40 або вище):

https://github.com/pschweitz/DBITail/releases

Ви можете знайти повну документацію (вкладену і на сторінку Github також)

Філіп


0

або ви можете використовувати екран, щоб створити два термінали, а потім розділити їх.

SSH в перший хост, на який потрібно підключити файл журналу, і перед запуском хвоста введіть екран.

Потім введіть файл на цьому хості.

CTRL + A, c створить новий екран або вікно. З цього нового вікна ssh на другий хост і перейдіть на файл.

Тепер створити розділений екран

CTRL + A, SHIFT + S, це створить розділений екран із поточною оболонкою у верхній частині, а нижня частина порожньою. Щоб переключитися на нижню частину і помістити перший екран у неї,

CTRL + A, TAB, це перемістить вас до нижньої частини. Тепер, щоб принести ваш перший сеанс SSH в цю область:

CTRL + A "(символ котирування) та виберіть перший сеанс та натисніть клавішу Enter.

Я усвідомлюю, що це може виглядати як багато гімнастики, і це так, але ви користуєтеся ним, коли кілька разів користуєтесь ним.

Ось справді хороший підручник або швидке посилання на команди екрана: http://www.pixelbeat.org/lkdb/screen.html

Крім того, ви можете створити .screenrc файл, так що більша частина того, що я описав, може бути автоматизована під час першого входу на екран.

Ще одна приємна річ у цьому - це те, що ви можете просто закрити сеанс і відновити його в іншому місці. Наприклад, ви працюєте і у вас спостерігається певний моніторинг. Ви можете просто закрити сеанс, не виходячи з системи, і відновити роботу, повернувшись додому чи в інше місце.


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.