Как выполнить команду с произвольно длинным выводом на удаленных серверах и затем остановить?

Я знаю, что могу выполнить команду на удаленном сервере (см. этот вопрос о SO ).

Я хочу выполнить одну команду на нескольких удаленных серверах (возможно, используя сценарий, чтобы перебрать их все?), Где вывод команды будет иметь произвольно длинный вывод (т.е. вывод не остановится, пока я не нажму Ctrl + C ). Я также хочу иметь возможность остановить выполнение программы на удаленных серверах, которые выполняет эта команда.

Как мне выполнить команду с моего локального компьютера на произвольном количестве удаленных серверов, где (1) команда имеет неопределенный вывод длина и (2) команда завершается?

0
задан 25 September 2017 в 15:35
3 ответа

لنقم بكل المضيفات في حلقة ،وللتيسير ، قد ترغب في تنفيذ كل ssh في xterm الخاص به. لذلك قد نستخدم سطرًا واحدًا مثل هذا:

for host in host1 host2 host3;  do xterm -e ssh $host -t "echo -e '\033];$host\07';  YOUR_COMMAND >/tmp/$host.log 2>&1&  tail -f /tmp/$host.log"&  done

شرح قصير لأجزائه:

> / tmp / $ host.log 2> & 1 يعيد توجيه مخرجاتك إلى ملف - ربما ترغب في جمعها

يرسل جزء echo في الأمر البعيد تسلسل هروب يصنف xterm الخاص بك باسم المضيف. لذا إذا كان لديك 50 منهم ، فلا تزال تعرف ما هو.

2> & 1 يعيد توجيه ناتج الخطأ إلى نفس ملف السجل.

التالي و الخلفيات YOUR_COMMAND على المضيف ، لذلك يمكن لـ tail إظهار إخراجها لك.

يرسل آخر و أمر xterm المحلي إلى الخلفية ، لذلك يمكنك الحصول على العديد منهم في وقت واحد.

بالطبع يمكنك حذف كل ذلك الأشياء "المعقدة" ، فقط شاهد xterms الخاصة بك واضغط على ^ C في كل واحدة عندما ترى ما يكفي:

للمضيف في host1 host2 host3؛ فعل xterm -e ssh $ host -t YOUR_COMMAND & تم

2
ответ дан 4 December 2019 в 13:29

حسنًا ، إذا لم تكن لديك المتطلبات الخاصة بالإخراج الطويل والمقاطعة على Ctrl + C ، فإنني أنصحك بشدة. ومع ذلك ، في هذه الحالة ، يبدو الأمر أشبه بوظيفة لبعض وحدات التحكم المتعددة ، مثل المنهي:

https://gnometerminator.blogspot.cz/p/introduction.html

إنها تكوّن ما تكتبه في أحد المحطات الطرفية لـ allo الآخرين (عند تمكين هذا الخيار).

1
ответ дан 4 December 2019 в 13:29

هل جربت ssh من خلال من أجل حلقة؟ يمكنك إنهاء كل أمر وستذهب حلقة أبعد من ذلك.

[root@hostXYZ scripts]# for vm in host1 host2 host3; do ssh -t root@$vm "echo test; read"; done

test
^CConnection to host1 closed.

test
^CConnection to host2 closed.

test
^CConnection to host3 closed.

[root@hostXYZ scripts]# for vm in host1 host2 host3; do ssh -t root@$vm "echo test; read"; done

test
Connection to host1 closed.

test
Connection to host2 closed.

test
Connection to host3 closed.
-1
ответ дан 4 December 2019 в 13:29

Теги

Похожие вопросы