Я намагаюся tail
створити файл журналу на декількох віддалених машинах і переслати висновок на свою локальну робочу станцію. Я хочу, щоб з'єднання закривалися при натисканні Ctrl- C.
На даний момент у мене є така функція, яка майже працює за призначенням.
function dogfight_tail() {
logfile=/var/log/server.log
pids=""
for box in 02 03; do
ssh server-$box tail -f $logfile | grep $1 &
pids="$pids $!"
done
trap 'kill -9 $pids' SIGINT
trap wait
}
З'єднання закриваються, і я отримую вихід від tail
. АЛЕ, відбувається якесь буферизація, оскільки вихід надходить партіями.
А ось і найцікавіша частина ...
Я бачу таку саму буферну поведінку під час виконання наступного та додаю "тест" до файлу /var/log/server.log
на віддалених машинах 4-5 разів ...
ssh server-01 "tail -f /var/log/server.log | grep test"
… І знайшов два способи відключити це…
Додайте прапор до ssh.
ssh -t server-01 "tail -f /var/log/server.log | grep test"
Видаліть цитату з віддаленої команди.
ssh server-01 tail -f /var/log/server.log | grep test
Однак жоден з цих підходів не працює для функції, яка виконується на кількох згаданих вище машинах.
Я спробував dsh, які мають однакову буферну поведінку під час виконання.
dsh -m server-01,server-02 -c "tail -f /var/log/server.log | grep test"
Тут же, якщо я видалю цитату, буферизація проходить і все працює добре.
dsh -m server-01,server-02 -c tail -f /var/log/server.log | grep test
Також спробував, parallel-ssh
який працює точно так само, як dsh
. Хтось може пояснити, що тут відбувається?
Як виправити цю проблему? Було б ідеально їхати з прямою, ssh
якщо можливо.
PS Я не хочу використовувати multitail
або подібне, оскільки я хочу мати можливість виконувати довільні команди.
dbitail
та завантажити його можна звідси .