Я знаю, что могу выполнить команду на удаленном сервере (см. этот вопрос о SO ).
Я хочу выполнить одну команду на нескольких удаленных серверах (возможно, используя сценарий, чтобы перебрать их все?), Где вывод команды будет иметь произвольно длинный вывод (т.е. вывод не остановится, пока я не нажму Ctrl + C
). Я также хочу иметь возможность остановить выполнение программы на удаленных серверах, которые выполняет эта команда.
Как мне выполнить команду с моего локального компьютера на произвольном количестве удаленных серверов, где (1) команда имеет неопределенный вывод длина и (2) команда завершается?
لنقم بكل المضيفات في حلقة ،وللتيسير ، قد ترغب في تنفيذ كل 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 &
تم
حسنًا ، إذا لم تكن لديك المتطلبات الخاصة بالإخراج الطويل والمقاطعة على Ctrl + C ، فإنني أنصحك بشدة. ومع ذلك ، في هذه الحالة ، يبدو الأمر أشبه بوظيفة لبعض وحدات التحكم المتعددة ، مثل المنهي:
https://gnometerminator.blogspot.cz/p/introduction.html
إنها تكوّن ما تكتبه في أحد المحطات الطرفية لـ allo الآخرين (عند تمكين هذا الخيار).
هل جربت 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.